28. Python Web 编程:Django 基础教程

目录

    • 安装使用
    • 创建项目
    • 启动服务器
    • 创建数据库
    • 创建应用
    • 创建模型
    • 设计路由
    • 设计视图
    • 设计模版

安装使用

Django 项目主页:https://www.djangoproject.com

访问官网 https://www.djangoproject.com/download/ 或者 https://github.com/django/django

'''Windows 按住win+R 输入 cmd,Mac 打开Terminal
pip install Django==3.1.7
或者
git clone https://github.com/django/django.git
'''
# 输入python进入解释器,查看版本
import django
print(django.VERSION)
exit()

创建项目

一个网站可以包含多个Django项目,一个Django项目包含多个应用,又包含一组特定的对象,创建项目的基本步骤如下:

  1. 新建文件夹用来存放项目,然后使用cd命令切换到该文件夹下。
  2. 输入下面命令,在该目录中新建一个mysite项目。
adjango-admin startproject mysite
zsh: command not found: adjango-admin
# 报错原因是因为没配置路径,在这里就不展示配置路径,直接用绝对路径执行,如下
/Users/guanfawang/opt/anaconda3/lib/python3.9/site-packages/django/bin/django-admin.py startproject mysite

在这里插入图片描述

  • manage.py:Django 管理主程序,也是实用的命令工具,方便管理Django项目,同时方便用户以各种方式与Django项目进行交互。
  • __init__.py:一个空文件,告诉Python该目录是一个Python包。
  • settings.py:全局配置文件。包括Django模块应用配置、数据库配置、模版配置等。
  • urls.py:路由配置文件,包含URL的配置文件,也是用户访问Django应用的方式。
  • wigs.py:一个与WSGI 兼容的Web服务器入口,以便运行项目,相当于网络通信模块。

这些文件仅仅包含一个最简单的Web应用所需要的代码。当Web应用变得复杂时,将对这些代码进行扩充。

启动服务器

执行下面代码,启动Web服务器。

cd mysite
python manage.py runserver

在这里插入图片描述

复制网址,浏览器打开,可以看到下面情况,说明Web服务器启动成功。

在这里插入图片描述

使用Ctrl+C中断该服务器。

创建数据库

Django 内置SQLite数据库,同时支持更多的数据库,如MySQL、PostgreSQL等,每个Django应用目录中都包含一个settings.py文件,可以用来实现对数据库的配置。

# 源settings.py文件默认sqlite3
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 可以将它修改成mysql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '11111111',
        'NAME': 'webname'
    }
}

# 输入一下命令创建
python manage.py migrate
'''报错:原因是Django并不认这个外来文件驱动
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
'''
# 可以在__init__.py空文件中,添加以下命令
import pymysql
pymysql.install_as_MySQLdb()

# 再一次执行创建,就生成了
python manage.py migrate
或者
python manage.py makemigrations

在这里插入图片描述

进一步使用客户端工具连接mysql,就可以看到相关表和数据了。

在这里插入图片描述

创建应用

一个Django项目可以包含多个Django应用,执行下面命令将会生成下图相关文件。

python manage.py startapp demo

在这里插入图片描述

  • migrations:该文件夹用于在之后定义引用迁移功能。
  • __init__.py:一个空文件,在这里是必须的。用来将整个应用作为一个Python模块加载。
  • admin.py:管理站点模型,用于编写Django自带的后台相关操作,默认为空。
  • apps.py:定义应用信息。
  • models.py:设置数据模型,即定义数据表结构。
  • tests.py:用于编写测试代码的文件。
  • views.py:包含视图模型的相关操作,即定义业务逻辑。

创建模型

创建模型其实就是创建表,Django通过Model操作数据库,自动生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,Django自动完成对数据的操作,只要能够设计Model即可。

打开models.py文件、settings.py文件,添加以下相应的代码。

# models.py文件添加下面代码,可以创建数据表格对应的数据模型
from django.db import models # 引用数据库创建模块
class Test(models.Model): # 定义表结构,下面是字段列表
    username = models.CharField(primary_key=True,max_length=20) 
    password = models.CharField(max_length=20) # 定义了password 字段,models.CharField相当于 varchar

# settings.py文件新的app:demo
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'demo'
]

创建表结构

python manage.py migrate
'''
Migrations for 'demo':
  demo/migrations/0001_initial.py
    - Create model Test
'''

在这里插入图片描述

让Django知在数据模型中有一些变更。

python manage.py makemigrations demo
'''
Migrations for 'demo':
  demo/migrations/0001_initial.py
    - Create model Test
'''

创建demo数据表结构

python manage.py migrate demo
'''
Operations to perform:
  Apply all migrations: demo
Running migrations:
  Applying demo.0001_initial... OK
'''

返回客户端工具查看,可以发现新生成了demo_test表。

在这里插入图片描述

设计路由

路由就是根据不同的URL分发不同的信息。路由处理就是在服务器端接收到HTTP请求之后,能够对请求的路径字符串进行匹配处理,并根据URL调用相应的应用程序。

URL在Django中其实是由用户自己构造的,Django约定URL是在项目同名目录下的url.py文件的urlpatterns列表构造的。

# demo 应用中 view.py 文件,添加下面代码
from django.http import HttpResponse # 导入HTTP响应模块

def hi(request): # 定义视图函数
    return HttpResponse('Hi,my baby') # 设计响应内容,返回响应信息

# 编写路由,url.py 添加下面代码,绑定URL与视图函数
from demo import views # 导入模块视图

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hi/',views.hi) # 添加一个元素,定义路由
]

在浏览器中输入:http://127.0.0.1:8000/hi/ 就能看到响应信息,如下图。

在这里插入图片描述

设计视图

每一个URL都对应一个views视图函数名,视图函数名不能相同,否则会报错。Django约定视图函数写在APP应用里的views.py文件中。

# demo 应用中 view.py 文件,添加下面代码
from demo import views # 导入视图模块
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hi/',views.hi),
    url(r"^show_news/(\d+)/(\d+)$",views.show_news)

]

# 编写路由,url.py 添加下面代码,绑定URL与视图函数
from django.http import HttpResponse # 导入HTTP响应模块

def hi(request):
    return HttpResponse('Hi,my baby')

def show_news(request,a,b):
    return HttpResponse("<h1>新闻、界面<p>新闻类别:%s</p><p>当前页面:%s</p>"%(a,b))

在浏览器中输入:http://127.0.0.1:8000/hi/)show_news/2/3 就能看到响应信息,如下图。

在这里插入图片描述

设计模版

当用户发送请求的时候,视图返回一个响应,响应可以是一个重定向、一个404错误、一个XML文档、一张图片或者是一个HTML内容的网页。前面几个返回的信息比较有限,重点是HTML内容的网页,把这样的页面按规范写好,然后都放在项目根目录下的templates文件夹里,这样的页面被称为“模版”页面。

Django作为成熟的Web框架,需要一种很便利的方法动态生成HTML网页,因此有了模版这个概念。模版页面包含一些基础的HTML代码和一些特殊的语法,这些特殊的语法主要用于如何将动态数据插入HTML页面中。

静态部分:HTML、CSS、Javascript设计。

动态部分:通过Django动态框架设计。

在demo目录下,创建一个templates目录,并在templates下创建test.html文件,设计一个简单的表单页面,内容如下:

<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<form action="search" method="GET">
    <input type="text" name="name">
    <input type="submit" value="搜索">
</form>
</body>
</html>

demo 应用中 view.py 文件,添加下面代码,定义两个视图函数。

from django.http import HttpResponse

def hi(request):
    return HttpResponse('Hi,my baby')

def show_news(request,a,b):
    return HttpResponse("<h1>新闻、界面<p>新闻类别:%s</p><p>当前页面:%s</p>"%(a,b))

def f1(request):
    return render(request,"test.html")

def f2(request):
    request.encoding='utf-8'
    if 'name' in request.GET and request.GET["name"]:
        t = "你搜索的内容为:"+ request.GET['name']
    else:
        t = '提交的表单为空'
    return  HttpResponse(t)

编写路由,在url.py 添加下面代码,绑定URL与视图函数。

from demo import views
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hi/',views.hi),
    url(r"^show_news/(\d+)/(\d+)$",views.show_news),
    url(r"^search_form$",views.f1),
    url(r"search$",views.f2)
]

启动服务器:python manage.py runserver。浏览器输入http://127.0.0.1:8000/search_form,进一步输入网络爬虫,可以得到如下结果。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/228657.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)

一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0c;确…

OpenCL学习笔记(二)手动编译开发库(win10+vs2019)

前言 有时需求比较特别&#xff0c;可能需要重新编译opencl的sdk库。本文档简单记录下win10下&#xff0c;使用vs2019编译的过程&#xff0c;有需要的小伙伴可以参考下 一、获取源码 项目地址&#xff1a;GitHub - KhronosGroup/OpenCL-SDK: OpenCL SDK 可以直接使用git命令…

PostgreSQL从小白到高手教程 - 第38讲:数据库备份

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第38讲&#…

【MATLAB源码-第97期】基于matlab的能量谷优化算法(EVO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 能量谷优化算法&#xff08;Energy Valley Optimization, EVO&#xff09;是一种启发式优化算法&#xff0c;灵感来源于物理学中的“能量谷”概念。它试图模拟能量在不同能量谷中的转移过程&#xff0c;以寻找最优解。 在EVO…

当然热门的原创改写改写大全【2023最新】

在信息时代&#xff0c;随着科技的不断发展&#xff0c;改写软件逐渐成为提高文案质量和写作效率的重要工具。本文将专心分享一些好用的改写软件&#xff0c;其中包括百度文心一言智能写作以及147SEO改写软件。这些工具不仅支持批量改写&#xff0c;而且在发布到各大平台后能够…

一文详解设备维护管理软件:降本增效的关键利器

设备维护管理软件是一种专门为优化和简化设备维护流程而设计的工具。随着技术的进步和业务的扩展&#xff0c;各类企业和机构不得不面对规模日益庞大和复杂的设备和基础设施&#xff0c;如何高效地维护和管理这些设备成为企业发展中面临的一项重要挑战。 在这个背景下&#xff…

uniapp实战 —— 开发微信小程序的调试技巧

手机真机调试微信小程序 开发版和体验版的小程序&#xff0c;域名没有备案时想调试接口访问效果&#xff0c;可以按下述方式操作&#xff1a; 在手机上点右上方三个点&#xff0c;点击“开发调试”&#xff0c;开启调试模式&#xff0c;即可真机访问接口&#xff08;跳过域名校…

一篇文章理解 Taro1/3原理

最近在进行 Taro项目的升级&#xff0c;由 Taro1升级到 Taro3&#xff0c;但是细想一下一直都是在使用 Taro&#xff0c;却没有进行深入的了解&#xff0c;本篇文章就深入解析下 什么是 Taro? 为什么要用 Taro 在使用任何一种技术之前&#xff0c;都要了解这两个问题&#xf…

LangChain的函数,工具和代理(六):Conversational agent

关于langchain的函数、工具、代理系列的博客我之前已经写了五篇&#xff0c;还没有看过的朋友请先看一下&#xff0c;这样便于对后续博客内容的理解&#xff1a; LangChain的函数&#xff0c;工具和代理(一)&#xff1a;OpenAI的函数调用 LangChain的函数&#xff0c;工具和代…

05-微服务架构构建之六边形架构

文章目录 前言一、六边形架构的概念二、六边形架构的特点三、微服务架构的良好实践总结 前言 通过前面的学习&#xff0c;我们掌握了微服务架构的基本组件等内容。在选择适合每个微服务的架构时&#xff0c;六边形架构“天然”成为每个微服务构建的最佳选择。 一、六边形架构的…

HttpComponents: 概述

文章目录 1. 概述2. 生态位 1. 概述 早期的Java想要实现HTTP客户端需要借助URL/URLConnection或者自己手动从Socket开始编码&#xff0c;需要处理大量HTTP协议的具体细节&#xff0c;不但繁琐还容易出错。 Apache Commons HttpClient的诞生就是为了解决这个问题&#xff0c;它…

数据资源和数据资产的区别是什么?

数据资源&#xff1a;狭义的数据资源是指数据本身&#xff0c;即企业运作中积累下来的各种各样的数据记录&#xff0c;如客户记录、销售记录、人事记录、采购记录、财务数据和库存数据等。广义的数据资源涉及数据的产生、处理、传播、交换的整个过程&#xff0c;包括数据本身、…

Vue3小兔鲜电商前台项目总结

1.code地址 https://github.com/15347113049/vue-rabbit.git 2.项目基础栈 Vue3全家桶:create-vue Pinia ElementPlus Vue3Setup Vue-Router VueUse 3.主要业务 (1)整体路由搭建 (2)layout布局 (3)Home页一级分类 (4)二级分类详情页 (5)登录功能 (6)购物车(头部…

基于POSIX标准的Linux进程间通信

文章目录 1 管道&#xff08;匿名管道&#xff09;1.1 管道抽象1.2 接口——pipe1.3 管道的特征1.4 管道的四种情况1.5 匿名管道用例 2 命名管道2.1 创建一个命名管道——mkfifo2.2 关闭一个管道文件——unlink2.3 管道和命名管道的补充2.4 命名管道用例 3 共享内存3.1 原理3.2…

持续集成交付CICD:Jenkins使用GitLab共享库实现前后端项目Sonarqube

目录 一、实验 1.Jenkins使用GitLab共享库实现后端项目Sonarqube 2.优化GitLab共享库 3.Jenkins使用GitLab共享库实现前端项目Sonarqube 4.Jenkins通过插件方式进行优化 二、问题 1.sonar-scanner 未找到命令 2.npm 未找到命令 一、实验 1.Jenkins使用GitLab共享库实现…

【MATLAB源码-第98期】基于matlab的能量谷优化算法(EVO)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 能量谷优化算法&#xff08;Energy Valley Optimization, EVO&#xff09;是一种启发式优化算法&#xff0c;灵感来源于物理学中的“能量谷”概念。它试图模拟能量在不同能量谷中的转移过程&#xff0c;以寻找最优解。 在EVO…

vue 一直运行 /sockjs-node/info?及 /sockjs-node/info报错解决办法

sockjs-node介绍 sockjs-node 是一个JavaScript库&#xff0c;提供跨浏览器JavaScript的API&#xff0c;创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。 服务端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客户端&a…

【JNPF】好用、高性价比的低代码开发平台

目录 1.JNPF介绍 突出优势 2.JNPF的开放性与扩展性 平台的开放性&#xff1a; 平台高拓展性 在快速发展的软件开发领域&#xff0c;低代码平台已经成为了一种重要的开发方法&#xff0c;它使非专业开发人员也能够参与到软件开发中去&#xff0c;大大加速了软件开发的效率。…

Stable Diffusion XL on diffusers

Stable Diffusion XL on diffusers 翻译自&#xff1a;https://huggingface.co/docs/diffusers/using-diffusers/sdxl v0.24.0 非逐字翻译 Stable Diffusion XL (SDXL) 是一个强大的图像生成模型&#xff0c;其在上一代 Stable Diffusion 的基础上主要做了如下优化&#xff1a;…

企业计算机服务器中了360勒索病毒如何解密,勒索病毒解密数据恢复

网络技术的不断应用与发展&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也不断增加。近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒攻击&#xff0c;导致企业的所有数据被加密&…