目录
一.请求与响应
请求是指浏览器端通过HTTP协议发送给服务器端的数据
响应是指服务器端收到请求后做出响应的处理再返回给浏览器端的数据
1.请求
包含三部分:起始行,headers,body
三种最常用的请求
GET:请求指定的页面信息,并返回实体主体
HEAD:类似与GET只不过返回响应中无具体内容,用于获取报头
POST:向指定资源提交数据进行处理请求(例如提交表单或上传文件),数据包含在请求体中, POST请求可能会导致新的资源建立或已有资源修改
在Django中实则就是视图中的第一个参数,即HttpResponse对象
Django在收到http协议之后,会根据数据报文创建HttpResponse对象
HttpResponse对象通过属性描述了请求的所有相关信息
path_info :url字符串
method:字符串,表示HTTP请求方法
GET:QueryDick查询字典的对象,包含GET请求的所有数据
POST:QueryDick查询字典的对象,包含POST请求的所有数据
FLILES:类似与字典的对象,包含上传的所有文件信息
COOKIES:python字典,包含所有的cookies,键值都为字符串
session:类似于字典,表示当前会话
body:字符串,请求体的具体内容
scheme:请求协议
request.MATE:请求中的元数据(消息头)
request.META['REMOTE_ADDR']:客户端地址
2.响应
包含三部分:起始行,headers,body
响应状态码
分类 分类描述 1** 信息,服务器收到请求,需要请求者继续操作 2** 成功,操作成功接受并受到处理,200(成功) 3** 重定向,需要进一步操作,301(永久重定向),302(临时) 4** 客户端错误,包含语法错误,或无法完成请求,404(网页不存在) 5** 服务器错误,服务器在处理请求时发生错误,500(内部服务器出错)
Django中的响应对象:
构造函数格式:HttpResponse(content=响应体,content _type:响应体数据类型,status:状态码)
作用:向客户端返回响应,并携带相应响应体的内容
content_type 类型
-'text/html'(默认的,html文件)
-'text/plain'(纯文本)
-'text/css'(css文件)
-'text/javascript'(js文件)
-'multipart/form-data'(文件提交)
-'application/json'(json传输)
-'application/xml' (xml文件)
HttpResponse子类
类型 状态码 HttpResponseRedirect 302 HttpResponseNotModified 304 HttpResponseBadRequest 400 HttpResponseNotFound 404 HttpResponseForbidden 403 HttpResponseServerError 500
在使用HttpResponse子类时,需要import对应子类
二.GET 和POST
无论是GET还是POST,同意由视图函数接受请求,通过判断request .method来区分具体请求动作
1.GET
GET请求一般用于向服务器获取数据
产生GET请求的场景:
- 浏览器输入URL回车后
- <a href="地址?参数=值">
- from表单中method为get
在GET中如果有数据传递给服务器,通常用QueryString,注意不要传递敏感信息
GET方法
request.GET['参数名'] //当没有这个参数时,会直接报错
request.GET.get['参数名','默认值'] //当没有这个参数时,会按默认值处理
request.GET.getlist['参数名'] //,当一个参数对应多个值时,返回一个列表
2.POST
一般用于向服务器发送隐私/大量数据 如博客,密码等
POST方法
request.POST['参数名']
request.POST.get['参数名','默认值']
request.POST.getlist['参数名']
Django自带csrf验证,当前没有掌握,所有直接在settings.py文件中将其注释掉即可
三. django的设计模式和模板层
1.mvc和mtv
MVC 代表 Model-View-Controller(模型-视图-控制器)模式。
M模型层(Model),主要用于对数据库层的封装
V视图层(View)用于向用户展示结果(WHAT+HQW)
C 控制(Controller,用于处理请求、获取数据、返回结果(重要)作用:降低模块间的耦合度(解耦)
MTV 代表 Model-Template-View(模型-模板-视图) 模式。
M 模型层(Model) 负责与数据库交互
T模板层(Template)负责呈现内容到浏览器(HOW)
V视图层(View)是核心,负责接收请求、获取数据、返回结果(WHAT)作用:降低模块间的耦合度(解耦)
2. 模板层
模板是可以根据视图层传入字典动态变化的HTML网页
a.创建模板文件夹<项目名>/templates
在settings.py中 TEMPLATES 配置项
1. BACKEND:指定模板的引擎
2. DIRS:模板的搜索目录(可以是一个或多个)
3. APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件
4. OPTIONS:有关模板的选项
目前配置项中需要修改部分
设置DIRS -'DIRS': [os.path.join(BASE_DIR,'templates')].
若无引入os需要import os
b.模板的加载方式
from django.shortcuts import render
return render(request,'模板名称' ,字典数据)
c.模板层和视图层的交互
视图函数可以将python变量装到字典中传到模板层中
def index(request):
dic={
'username':'zzys'
}
return render(request,'模板层文件',dic)
//dic可用local()方法传入所有参数
模板层语法
<div> myname is {{ username }}</div>
3.模板层变量
a.能够传到模板层中的数据类型
str,int,dic,func,obj,list,tuple
b.在模板中使用变量语法
{{变量名}},{{变量名.index}},{{变量名.key}},{{对象 .方法}},{{函数名}}
c.模板标签
可以将服务端的一些流程控制嵌入到模板层中
标签语法 {% 标签 %}
{% 结束标签 %}
if标签
{% if条件表达式 %} {% elif 条件表达式 %} {% else %} {% endif %}
for标签
{% for 变量 in 可迭代对象 %} 可迭代语句 {% empty %} 可迭代对象无数据时执行的语句 {% endfor %}
四.URL反向解析
1.url出现位置
<a href="url"></a>
<from action="url"> </from>
//视图函数中302跳转
return HttpResponse('url')
2.url书写规范
a.绝对地址
http://127.0.0.1:8000/page/1
b.相对地址
“/page/1”
//以'/'开头的相对路径,浏览器会将协议,ip,端口和当前url组合访问
“page/1”
//没有'/'开头,浏览器会识别当前地址栏的URL最后一个/然后再加上此URL
3.url反向解析
url反向解析是指在视图或模板中,用path的第三个参数 name来进行动态查找或计算出当前URL
注意:name是唯一的,不能重复
a.url在模板中的使用
{% url 'name' '参数1' '参数2' %} //若此url含有转换器,可直接传参数
b.url在视图中的使用
from django.urls import reverse
reverse('别名',args=[],kwargs=[])
例如:
print(reverse('page',args=[1000]))
print(reverse('page',kwargs=['name'='zzys',age='10']))