Django入门(创建工程,子应用,视图)
Web应用程序处理流程
- 接收解析客户端发送的HTTP请求
- 完成请求的业务逻辑处理,处理本次HTTP请求
- 构造并返回处理结果–HTTP响应
MVT流程
- M全拼为Model,负责和数据库交互,进行数据处理
- V全拼View,接收请求,进行业务处理,返回应答。
- T全拼Template, 负责封装构造要返回的html。
创建Django项目
1. 创建
可以先切换到桌面
创建工程的命令为:
cd Desktop
在桌面创建工程
django-admin startproject 工程名称
2.工程目录说明
- settings.py是项目的整体配置文件
- urls.py是项目的URL配置文件
- wsgi.py是项目与WSGI兼容的Web服务器入口
- manage.py 是项目管理文件,通过它管理项目
3.运行开发服务器
pyhton manage.py runserver ip:端口
可以不写IP和端口,默认127.0.0.1:8000
- Django默认工作在调试Debug模式下,如果增加、修改、删除文件,服务器会自动重启。
- ctrl+c停止服务器
创建子应用
- Django的视图编写是放在子应用中的
- Flask框架中用类似子功能应用模块的概念,比如蓝图Blueprint。
创建
python manage.py startapp 子应用名称
子应用目录说明
- admin.py 文件跟网站的后台管理站点配置相关。
- apps.py 文件用于配置当前子应用的相关信息。
- migrations.py 目录用于存放数据库迁移历史文件。
- models.py 文件用户保存数据库模型类。
- tests.py 文件用于开发测试用例,编写单元测试。
- views.py 文件用于编写Web应用视图。
注册安装子应用
创建出来的子应用目录文件虽然被放到了工程项目目录中,但是django工程并不能立即直接使用该子应用。
在工程配置文件settings中
注册安装一个子应用的方法,即是将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。
视图
视图介绍和项目准备
- 视图函数写在子应用中的views.py文件中
def register(request):
"""
用户注册函数视图
:param request: 请求对象,包含了请求报文信息
:return: 响应对象,用于构造响应报文,并响应给用户
"""
# 响应数据
return http.HttpResponse('这里假装返回注册页面')
- 请求对象: HttpRequest()对应的对象
- 响应对象: HttpResponse()对应的对象
访问视图函数
-
通过网络地址向Django程序发请求,即可访问到函数视图
用户使用路由匹配请求地址 -
定义路由的方法:path()、re_path()、url()
path()
- 首先,在子应用中创建urls.py文件,在文件中定义路由信息
# urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
urlpatterns = [
# 函数视图路由语法:
# path('网络地址正则表达式', 函数视图名),
# 用户注册:http://127.0.0.1:8000/users/register/
path('users/register/', views.register),
]
- 在总工程中的urls.py中添加包含子应用的路由数据
urlpatterns = [
# 自带的后台管理系统的总路由:可以忽略
path('admin/', admin.site.urls),
# 总路由包含子路由语法
# path('网络地址前缀/', include('子应用.urls')),
# 或者
# path('', include('子应用.urls')),
# 用户模块:http://127.0.0.1:8000/users/register/
path('', include('users.urls')),
]
- 一个子应用对应一个子路由
- 使用include()将子应用中的路由数据包含到总工程中
-
运行测试
python manage.py runserver
-
路由匹配函数视图逻辑
类视图
- 类视图可以解决HTTP不同的请求方式,可以提高代码的可读性和复用性
定义类视图代码:
class RegisterView(View):
"""用户注册类视图
http://127.0.0.1:8000/users/register/
"""
def get(self, request):
"""
处理GET请求,返回注册页面
:param request: 请求对象,包含了请求报文信息
:return: 响应对象,用于构造响应报文,并响应给用户
"""
return http.HttpResponse('这里假装返回注册页面')
def post(self, request):
"""
处理POST请求,实现注册逻辑
:param request: 请求对象,包含了请求报文信息
:return: 响应对象,用于构造响应报文,并响应给用户
"""
return http.HttpResponse('这里假装实现注册逻辑')
访问类视图的方法和视图函数一样
注意: 启动测试时,注释CSRF中间件,在settings.py文件中
# 中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 为保证非GET请求(POST, PUT, DELETE)可以正常接收,该中间件需要注释掉
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]