对Django学习阶段的总结

        Django是一个开放源代码的web应用框架,它是一个基于M(Model)V(View)C(Controller)构造的框架,但是Django更关注的是M(Model)V(View)T(Templates),即模型,视图,模板。模型(Model)就是用来与数据库打交道,处理与数据相关的所有事务,模型中定义的一个类,相当于数据库中的一张数据表,类中定义的不同的属性,对应的是这张数据表中相应的字段。视图(View)是用来处理业务逻辑的,展示那些数据,怎么展示这些数据,都由视图函数来控制。模板(Templates)就是用来展示数据的HTML页面,是展示给用户看的页面。

        Django从创建一个项目开始,创建项目之后会在项目根目录下生成一个与项目同名的文件夹,文件夹中setting.py文件是用来配置整个项目的,setting.py主要的功能有,配置允许那些主机访问我的项目;注册生成的app;配置需要使用的模板路径;配置数据库;使用中文或者英文;添加中间件;配置静态资源的虚拟路径(相当于给静态资源路径取了个别名),配置静态资源文件的路径,如果使用Django内置的用户登录模块,还可以设置登录重定向的路由。

        Django中间件有内置和自定义的,比如是否启用session与CSRF验证(都是默认开启),session主要用来保持状态;状态保持的目的就是在一段时间内跟踪请求者的状态,实现跨页面访问当前请求者的数据;因为http是协议是无状态的,每次请求都是一个新的请求,客户端与服务器端的一次通信就是一次会话,有时候用户登录网站,跳转到其他的页面,而这些页面需要用到用户的信息,这时候就需要用到会话实现状态保持,在客户端或服务器端存储有关会话的数据。存储会话的方式有两种,一种是使用cookie,所有的数据都存储在客户端,但是因为cookie安全性不高,容易被截获,所以如果要将会话数据存储在cookie中,尽量不要存储敏感数据;另一种存储方式就是使用session,将所有的数据存储在服务器端,使用session存储会话用的数据,在客户端使用的是cookie存储session_id。CSRF(Cross Site Request Forgery)跨站请求伪造,什么是跨站请求伪造,举个例子来讲,某个恶意网站上有一个指向你的链接,如果某个用户登录到你的网站上,并且用户点击了恶意网站上的那个链接,那么你的网站就会收到收到这个恶意网站发来的请求,但是你的网站会认为这是用户自己发送的请求,这是因为正常用户浏览器与你的网站之间的session尚未过期,而浏览器之中的cookie之中还含有该用户的认证信息。CSRF之所以能够攻击成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie来通过验证,要抵御CSRF的攻击,关键在于在请求中加入黑客不能伪造的信息,并且该信息不能存在于cookie之中,可以在http请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证token,如果请求中没有token或者token不正确,则认为可能是CSRF攻击而拒绝该请求。

       urls.py这个文件是用来配置整个项目的一级路由,url解析就是从请求地址到正则表达式匹配的过程,路由有一级路由,二级路由;一般在创建的app下都会创建一个urls.py的文件,这个app里的urls.py文件用来配置二级路由,一级路由相当于请求的入口,主要作用是分发匹配到的请求,并调用相应的视图函数来处理请求。一级路由包含二级路由,先匹配一级路由,再匹配一级路由之下的二级路由。url中涉及到命名空间的知识,也就是将这个匹配的规则取一个名字,命名空间也就是将这个url匹配的规则再取一个名字,如果用到命名空间,就需要在html前端页面中使用url反向解析,这样做的好处就是当你修改了其中某一个正则表达式的匹配规则时,不需要修改前端页面中需要跳转的url,减少了代码修改的工作量,如果不使用命名空间,那么当你修改其中某个url匹配规则时,所有用到这个匹配规则的地方都需要修改,这样就显得非常复杂,繁琐。

        Model:model是用来操作数据库的文件,Django的ORM(对象关系映射)框架,ORM就是将一些数据库的增删改查操作封装成函数,在对数据库进行操作时,直接调用这些封装好的函数就行了,ORM框架的好处就在于它会根据对接的数据库引擎,翻译成对应的sql语句,所以使用Django开发项目无需关心底层使用是MySQL,Oracle还是sqlite,你只需调用相应的方法就行了,非常方便。定义模型有时候需要指定外键,指定外键需要设置关系名(related_name),关系名主要用来反向查找;文件字段,文件以及图片文件的上传,需要在设置字段时设置上传的目录位置。

        View:View视图函数定义接口,RESTful编程风格,使用RESTful编程风格,配置url的时候只配置两个url,一个用来显示所有对象的数据,另一个用来展示指定id对象的数据。这就需要用到类视图,在类视图中定义get,post函数来处理不同的请求;很多地方需要用到MiXin类,Mixin类可以自己定义,Django也有现成的MiXin类(LoginRequiredMixin,TemplateResponseMiXin),Mixin类就是一种混合类,之所以叫它混合类是因为只有跟别的类混合起来使用才有效果,举个例子,用户要查看自己所有的课程,还有可能对自己的课程进行增删改查操作,那么就需要你在定义展示所有课程的类视图时就需要判断用户是否登录,如果没有登录就跳转到登录地址,同时还需要获取到是哪个用户要操作,获取到这个用户的信息,如果不使用混合类,那么在每一个类视图中都要进行的两步操作就是,先判断用户有没有登录,判断是那个用户登录,记录这个用户的信息,然后用户才能进行增删查改操作。如果用Mixin类就能将判断是否登录与获取登录用户的信息定义成两个Mixin类,判断用户是否登录的类可以继承Django内置的LoginRequiredMixin类,记录用户信息再单独封装成一个MiXin类,再定义一个类给定读取信息的模型以及没有登录时候重定向的地址,这个类继承判断是否登录与记录用户信息的类,那么后面我们再定义其他类视图时,需要用到判断是否登录,需要使用模型数据,都可以通过继承这两个类来获得者两个功能,这就是MiXin的用法。restframework是一个快速构建web API强大而灵活的工具包,最显著的特点就是能够快速开发接口,使用restframework开发接口的流程特别简单,定义序列化类,定义视图函数;定义序列化类需要根据你自己的需求来选择你要返回的数据字段,定义视图函数有直接定义函数跟使用类视图两种,思想都是一样的,处理get与post请求;如果restframework快速开发接口并不能满足需求的话,可以自己开发接口,这就需要在你定义的模型类中定义将对象转化为字典的函数,然后再在视图函数中调用这个函数来返回你需要的json数据。

        Django学习还有更多知识点,这里就简单总结这个阶段学习到的Django的知识。

猜你喜欢

转载自blog.csdn.net/WanYu_Lss/article/details/81805710