django框架 [面试篇]
Django 是一个基于 Python 的web框架,遵循"快速开发,不重复造轮子(don't repeat yourself)"的原则,帮助用户构建web应用。
而 Django 它本身提供了一些全栈式的一些组件,包括了 ORM,模板引擎,表单处理,身份校验和后台管理。
首先 ORM 是 Django 提供的,可以使用 Model 类来快速生成数据表,Model 类对应数据表,类属性对应表字段,类实例对应表数据;操作数据库使用Orm的方法,不需要手写 SQL;如果模型类更改,使用 makemigrations 和 migrate 就可以同步到数据库,
然后就是表单模板引擎, Django 提供了模板的方式,可以快速生成 HTML 页面,另外也支持模板复用和模板继承。模版表单,可以提交处理后,可以将页面的数据提供到视图进行逻辑处理
- 常用于前后端不分离的情况(mvt模式)model类, temaplte模版,视图View。这就是常说的 MTV 模式。
- 如果是 VUE 加Django 前后端分离的情况,模板可能用的比较少,
Django 本身提供了一套用户系统,它默认是进行 session型认证,但也可以用到第三方库 DRF 来进行 token 校验,
同时带了一个后台管理系统,可以对模型的数据进行增删改查,另外也可以对admin页面进行定制化的开发,像我之前的在一次开发中,我写了一个博客风格的一个页面展示了博客标题列表,然后在下方有一个支持 MD 输入的编辑器,提交之后形成新的一篇文章,我们点击文章的标题也可以查看文章的内容。
另外 Django 它有很多生态,
- 比较关键的是第三方库 Django rest framework 可以快速生成 restful 风格的 API。支持序列化,认证,视图集
- 另外它有很多呃提供了很多命令行工具,比如说 start project 和 start app,可以帮助我们快速的开发写生成呃框架代码和应用代码,还有 create superuser 快速的创建用户等等
Django相比flask,是开箱即得的,flask更加的简洁。
-----------------------------
DRF 是一个高效、标准的 Django API 开发框架,通过序列化器、视图集和路由的封装,能快速构建 RESTful风格 API,
同时通过权限(设置permission)、认证(authetication如设置jwttoken)等机制保障安全性。
我在项目中,我的做法是项目目录下,放了一个utils包,这里面放通用的一些方法。
myproject/ ← 项目根目录
├── manage.py ←
├── myproject/ ←
│ ├── __init__.py ←
│ ├── settings.py ←
│ ├── urls.py ←
├── app1/ ←
├── app2/ ←
├── utils/ ←
│ ├── models.py ← 模型基类
│ ├── settings.py ←
│ ├── urls.py ←
- 有一个,models.py 中放模型基类,有创建人字段,修改人,创建时间,修改时间等字段。其他模型继承这个模型基类。
- 我创建了一个system应用,里面放用户信息,同时重新写了django用户表,并继承模型基类,添加了一些额外的字段,比如姓名、电话、头像等字段。
- 有一个viewset.py,里面自定义了一个【模型视图集基类】, 它继承的ModelViewSet类,
- 统一了(增删改查)接口的响应结构格式
- 增加了一个批量删除的接口
- 这里统一配置支持了(后端字段过滤、关键字搜索与排序)
- 应用中的view.py文件中,就继承模型视图基类,基本只需配置关键词搜索支持的字段,配置字段过滤支持的字段等。
- 实现权限控制,添加permission_classes为IsAuthenticated,他们在请求时就会校验是否登录了
- 有一个pagination.py分页器, 这里定义,分页请求的参数、和响应结构,在viewset.py中的list列表接口有被用到
- 一个exception.py异常处理函数,这里统一异常拦截处理。也就是接口的一些异常情况,也要进行统一结构的响应。
另外,我习惯使用jwt认证。
使用的是第三库,djangorestframework-simplejwt 。 setting中对simpleJWT进行配置,这样登录后就会返回token。需要登录接口就需要在请求头传递Authorization.
【实际项目】
集成httprunner4工具,封装的接口自动化平台。
- 测试项目,一个项目会包含一个debugtalk.py文件。
- 测试用例,每个数据包含一个yaml测试用例的内容。
- 测试计划,选择所在项目的一部分测试用例来执行。 测试计划执行后,会生成一份测试allure测试报