Day34:django相关
一、初识Django
1、简介
Django是一个遵循MVC开发模式的框架。
它在models.py中定义各种类代表数据模型(Model)和数据库引擎交互,进行数据的增删改查操作。
templates文件夹中的模板文件则代表视图(View),负责展示数据内容。
urls.py中定义了访问url与views.py中定义的处理函数的对应关系, 根据不同的请求URL调用views.py中对应的处理函数。这个过程代表了Controller。
Django框架也被称为MTV框架:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
2、关于request和response
我们知道,Django 是围绕着 Request 与 Response 进行处理的,也就是“求”与“应”。
当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,
把这个 HttpRequest 对象作为第一个参数传给 view 方法。任何 view 方法都应该返回一个 HttpResponse 对象。
- HttpRequest对象表示来自某客户端的一个单独的 HTTP 请求;HttpRequest 对象是 Django 自动创建的。
- HttpResponse对象的功能是将服务器端的数据发送到客户端浏览器;HttpResponse对象必须自己创建。HttpResponse对象提供了一个数据集合cookie,
它用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。
3、request的几种用法
1) request.method
表示提交请求使用的HTTP方法。例如POST和GET
2) request.POST
HTTP协议定义的一种与服务器交互的方法,一个类字典对象,包含所有的HTTP的POST参数的信息,用于更新和提交数据。
它会把提交的数据放置在HTTP包的包体中。
3) request.GET
HTTP协议定义的一种与服务器交互的方法,一个类字典对象,包含所有的HTTP的GET参数的信息,用于获取或查询资源信息;
GET提交,请求的数据会附在URL之后,以“?”分割URL和传输数据,多个参数用&连接;如果数据是英文字母/数字,原样发送,
如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密
4) request.COOKIES和request.session
session与Cookie都可以称作是一种缓存,其存在的最大目的都是为了减少用户request与response之间的时间损耗,提高用户的浏览体验。
- cookies
cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies。
它保存在浏览器下的某个文件夹下。
- session
Django的Session机制会向请求的浏览器发送cookie字符串。同时也会保存到本地一份,用来验证浏览器登录是否为同一用户。
它存在于服务器,Django默认会把session存入到数据库中。
Session依赖于Cookie,如果浏览器不能保存cookie那么session就失效了。因为它需要浏览器的cookie值去session里做对比。
session就是用来在服务器端保存用户的会话状态。由于session是保存在服务器端的,所以用户永远不可能拿到session内的具体内容。
- session id 的作用
session id是保存在cookie中的一个随机字符串。服务器通过查看用户cookie中的session id信息,获取id,
来与session中的用户名进行比对,比对成功,则说明认证通过,可进行其他的操作。
4、render和redirect函数
1)render:
render(request, template_name[, context])
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
参数:
request: 用于生成响应的请求对象。
template_name:要使用的模板的完整名称,可选的参数
context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。
status:响应的状态码。默认为200。
2)redirect:
参数可以是:
一个模型:将调用模型的get_absolute_url() 函数
一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
一个绝对的或相对的URL,将原封不动的作为重定向的位置。
默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。
5、django请求响应流
1)WSGI
WSGI是为了解决一个基本问题而创建的工具:这个问题就是如何将Web服务器连接到Web框架。
WSGI有两面:服务器端和应用程序端。
为了处理WSGI响应,服务器端执行应用程序并向应用程序提供一个回调函数。
应用程序处理请求,并使用提供的回调函数将响应返回给服务器。
本质上,WSGI处理程序充当你Web服务器(Apache,Nginx等)和Django项目之间的看门人。
服务器和应用程序之间就是中间件。
你可以将中间件视为一系列双向过滤器:它们可以改变(或短路)网络和Django应用程序之间来回传递的数据。
2)Data Flow
当你请求你的WEB应用程序时,一个WSGI handler实例化了 ,它做了以下操作:
1、导入你项目的settings.py文件,和一些Django的异常处理类
2、加载MIDDLEWARE中列出来的所有中间件类
3、构建四个处理请求,视图,响应和异常处理的方法列表。
4、循环遍历请求方法,按顺序执行它们
5、解析请求的URL
6、循环遍历每个视图处理方法
7、调用视图函数(通常会渲染模板)
8、处理任何异常的方法
9、循环便利每个响应方法(从内向外,按请求中间件的反向顺序)
10、最后建立一个返回值并将回调函数调用到Web服务器
3)中间件
Django项目中的一些关键功能中,都用到了中间件:例如,你使用CSRF中间件防止跨站请求伪造攻击,
它们被用于处理session数据。认证和授权都是通过使用中间件完成的。
你可以编写自己的中间件类,去修改(或短路)经过你应用程序的数据流。

浙公网安备 33010602011771号