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的解决办法(转)(代码片段

Django REST框架--认证和权限

如何在 Django 中显式重置模板片段缓存?

使用 Django 模板作为片段

python 通过django片段很多很多

JavaScript 片段在 Django 模板中不起作用