Django
Posted wanglieitem
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django相关的知识,希望对你有一定的参考价值。
什么是Django:
1.重量级框架
- Django原生提供众多的功能组件
- 数据库ORM支持
- session机制
- 权限验证
- 缓存
### 一些web开发所需要的组件,Django框架都已封装好了
2.MTV设计模式
核心思想是分工,解耦。让不同的代码块之间降低耦合度,增强了代码的扩展性和可移植性,方便代码的复用
注:特别喜欢Django的Admin,给人的感觉非常棒,是一个很完美的自动化的管理界面。
Django框架的设计模式用的是MTV, 借鉴了MVC框架的思想,MTV对应的也就是三个部分,Model(模型)、Template(模板)和View(视图)。
Model模型:负责业务对象的模型类和数据库表字段的生成(通俗讲就是ORM)
Template模板:负责封装构造要返回的html,进行页面展示
View视图:负责具体的业务逻辑的编写,对Model和Template的调用
创建视图:
视图函数第一个传入的参数必须定义,接受的是HttpRequest对象(as:request)
视图函数返回也必须是一个HttpRespones对象,(Flask是直接返回一个字符串)
路由定义:
对应的业务逻辑代码块中,创建子应用的urls.py文件,在主路由urls.py中添加子路由的路由数据,Django中设置了一个可以自动识别路由的列表变量: urlpatterns = [ ],urlpatterns中所存放的路由信息都需要使用url函数来构造,url函数中放置的是路由路径和所对应的视图。注意一点:Django中的路由解析,是从上到下解析,要注意路由顺序,防止路由屏蔽。还有要遵循RESTful的设计风格。
RESTful风格:
- 每一个URL代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"
配置文件:
项目中所用到的配置,都需要在配置文件中进行配置
BASE_DIR: 工程根目录,也可以使用它来构造文件路径
静态文件配置、域名配置、CORS跨域访问配置、JWT配置、mysql、Redis、都需要在settings文件中进行配置。注意一点,开发模式下Debug设置为True,生产模式设置为False,和Flask一样,静态文件内置服务器只在Debug模式下提供,生产环境下,需要将静态文件部署到Ngaxs或其他服务器上。
请求和响应:
接口请求的几种参数传递的方式:
1.url路径传参
2.查询字符串传参(request.get获取,返回QueryDict对象)
3.请求体传参(可以是表单、JSON字符串、XML字符串)
4.请求头(request.META)
返回响应对象的几种形式:
1.HttpResponse对象
2.JsonResponse构造响应对象(返回json数据,前端页面中的Content_Type要设置为application/json)
3.redirect重定向
session会话保持:
将session保存到redis中,安装django_redis扩展,缓存的session数据,可以通过HttpRequest来获取(存入方式:request.session[‘键‘]=值,读取方式:request.session.get(‘键‘,默认值))
视图类:
基类:view
view具有的功能:获取请求,返回视图响应
view基类中比较重要的两个知识点:as_view 和 dispatch方法,在Django源码中通过装饰器实现
as_view:
url路由指向的入口函数
返回一个view方法,初始化这个view方法所传递过来的参数,得到属性返回一个dispatch方法
dispatch方法:
请求方式的分配,获取我们所定义的请求方式来执行,最后会返回视图函数
view视图可以得到两个视图基类:
APIview:
APIview是通过REST fromework提供的,继承view父类,所以view所具有的方法和属性,APIview都具有,同时新增了一些属性,比如权限验证,流量监控等;还有REST fromework中的五个扩展类Mixin,实现了增删改查功能,比如获取单个数据CreateModelMixin,获取多个数据ListModelMixin等,减少代码的复用。
GenericAPIview:
继承自APIview,所以APIview所具有的方法和属性,他也都有,自己还定义一系列的属性和方法:
1.定义的属性
queryset : 列表视图的查询集
serializer_class : 序列化器类
2.提供的方法
get_queryset : 获取查询集的所有数据
get_object: 获取查询集中模型类中单一的数据对象
get_serializer_class :获取序列化器类
get_serializer : 获取序列化器类中所需要序列化的对象
view和APIview、GenericAPIview不同之处是:
view传入的视图或者返回响应的方法是根据Django的HttpRequest对象和HttpResponse对象实现的,而APIview、GenericAPIview是通过REST fromework的方法实现的,这两个对象是:
1.Request对象:自动把前端传过来的数据格式 解析为python的字典数据
2.response对象:构造的响应对象返回前端时会转换为对应的数据格式
起到一个序列化的作用
Django中有意思的地方就是序列化器和视图集
先说序列化器:
Django中已经封装好了序列化器Serializer,就是起数据格式转换和校验的作用。
根据创建分为两种情况:
1.Serializer.ModelSerializer模型类序列化器:
映射模型字段进行序列化,需要指明模型对象,明确进行序列化的字段
2.serializer.Serializer自定义序列化器:
不针对数据库字段,就是说想序列化的字段自己构造
Serializer(instance = None9(自定义的模型对象), data = data(反序列化的数据),context(额外参数))
根据请求方式不同分为:
序列化器:get请求,对数据的读取
反序列化器:post请求,对数据的保存,修改 ,会通过is_valid()对表单、字段进行验证,验证成功会得到一个模型对象(validated_data),将参数传递到这个模型对象中,进行参数的校验,校验成功就能得到一个验证过后的模型对象。三种验证方法:
1.单字段 validate_字段名
2.全字段 validate(self.data)
3.字段中添加validate,用的比较少
视图集:
通过继承集基类不同分为几种:
1.viewSet:
继承APIview ,不会提供方法,只提供动作,我们可以通过action属性去获取他的动作,通过不同的动作设置不同的序列化器。
2.GenericViewSet:
继承自GenericAPIView,提供了get_object、get_queryset等方法。
3.ModelViewSet:
模型类视图集,封装了不同业务逻辑的动作和方法:
ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin
我们只需要根据不同的业务逻辑调用就行
以上是关于Django的主要内容,如果未能解决你的问题,请参考以下文章
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段