测试开发进阶(二十)
- 2019 年 10 月 7 日
- 筆記
Django基础
1.为什么要使用框架来开发
- 站在巨人的肩膀上
- 提升开发效率
- 只关注业务逻辑的实现,不关心底层建设
2.Django vs Flask
- Django
- 大而全
- 入门简单
- 最流行
- 类似于精装修的房子
- Flaks
- 轻量级
- 定制化程度高
- 流行
- 高手的玩偶
- 类似于毛坯房
3.Django是什么
Django makes it easier to build better Web apps more quickly and with less code.
4.特点
- 提供创建项目工程自动化工具
- 数据库ORM支持
- 模版
- 表单
- Admin管理站点
- 文件管理
- 认证权限
- session机制
- 缓存
创建工程
命令行创建
- 安装Django
$ pip install Django
- 创建项目
$ django-admin startproject 项目名
- 运行项目
$ python manage.py runserver $ python manage.py runserver ip:端口
使用Pycharm创建项目
注意:使用Pycharm专业版

启动



国际化
修改 settings.py
中的
LANGUAGE_CODE
为zh-hans
TIME_ZONE
为Asia/Shanghai
页面展示的内容就会变成中文

创建子应用
- 业务功能模块复用
- 将工程项目拆分为不同的子功能模块,以子应用的形式存在
- 各功能模块间可以保持相对的独立
- 可以将该模块代码整体复制过去
创建
$ python manage.pt startapp 子应用


注册
在全局配置文件 settings.py
中 INSTALLED_APPS
添加 'projects.apps.ProjectsConfig'
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 注册子应用 # 子应用名.apps.子应用名首字母大写Config 'projects.apps.ProjectsConfig', ]
子应用创建一个视图
# projects/views.py from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse('<h1>「测试游记」</h1>')
# LearnDjango/urls.py from django.contrib import admin from django.urls import path from projects.views import index urlpatterns = [ path('admin/', admin.site.urls), path('index/', index), ]
刷新页面后可以发现首页消失

根据提示访问:http://127.0.0.1:8000/index/

LearnDjango/urls.py
:
全局路由配置
- urlpatterns为固定名称的列表
- 列表中的一个元素,就代表一条路由
- 从上到下进行匹配,如果能匹配上,Django会导入和调用path函数第二个参数指定的视图(或子路由)
- 如果匹配不上会自动抛出404异常
- 5.
使用子路由
# projects/urls.py # -*- coding:utf-8 -*- """ @Describe: urls @Author: zhongxin @Time: 2019-09-24 07:42 @Email: [email protected] """ from django.urls import path from .views import index urlpatterns = [ path('', index), ]
# LearnDjango/urls.py from django.contrib import admin from django.urls import path from django.urls import include urlpatterns = [ path('admin/', admin.site.urls), path('index/', include('projects.urls')) ]
每个应用(模块)都会维护一个子路由(当前应用的路由消息) 跟主路由一样,也是由上到下进行匹配 能匹配上,则执行path第二个参数指定的视图,匹配不上抛出404异常
视图
函数视图
def index(request): return HttpResponse('<h1>「测试游记」</h1>')
上面就是一个 函数视图
视图函数第一个参数 request
是HttpRequest对象,包含前端用户的所有请求信息
必须返回一个HttpResponse对象或者子对象
def index(request): if request.method == 'GET': return HttpResponse('<h1>「测试游记」GET请求</h1>') elif request.method == 'POST': return HttpResponse('<h1>「测试游记」POST请求</h1>') else: return HttpResponse('<h1>「测试游记」其他请求</h1>')
使用 postman
进行测试



类视图
# projects/views.py from django.views import View class IndexView(View): """ index 主页类视图 """ def get(self, request): return HttpResponse('<h1>「测试游记」类视图GET请求</h1>') def post(self, request): return HttpResponse('<h1>「测试游记」类视图POST请求</h1>')
# projects/urls.py from django.urls import path from projects import views urlpatterns = [ path('', views.IndexView.as_view()), ]



可以看到其他请求返回了 405
模版
新建 templates/demo.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>「测试游记」</title> </head> <body> <h1>「测试游记」模版</h1> </body> </html>
修改视图 returnrender(request,'demo.html')
class IndexView(View): """ index 主页类视图 """ def get(self, request): return render(request,'demo.html') def post(self, request): return HttpResponse('<h1>「测试游记」类视图POST请求</h1>')
查看页面

MVT
M:模型(Model) 与MVC中的M功能相同,负责和数据库交互,进行数据处理
V:视图(View) 与MVC中的C功能相同,接收请求,进行业务处理,返回响应
T:模版(Template)与MVC中的V功能相同,负责构造要返回的html页面
数据库
<——–> M模型
<–请求/返回数据–> V视图
<–请求/返回模版内容–> T模版
<–展示–> 客户端