Django——模块配置
Django内常用的模块配置
request(返回信息)
- request为客户端访问返回信息。
- 返回的是一个对象,可以使用属性进行提取。
- 用户创建自定义函数时,必须要进行request的形参传入,否则将会报错。
- 当url上带有参数时,不管是get还是post,都会传入到后台,使后台能够获取到。
def login(request):
print(request)
-
request.mothod(请求方式)
- 返回用户的请求方式(get或者post)
- 以字符串形式返回
- 以大写形式来返回
def login(request):
print(request.method)
-
request.GET(请求消息)
- 使用html标签发送get请求
- 后台可以通过某一个标签的get请求,来获取同时发送过来的信息,并进行相应的操作。
- 如果需要获取多个,那么使用getlist,将返回一个列表。
#html配置,通过for循环出来的user.pk信息
<a href="/index/?id={{ user.pk }}">删除</a>
#后台
if request.GET.get('id'):
pass
-
request.POST(提取用户信息)
- 获取用户返回的信息
- 会以QueryDict的形式返回用户的提交数据。
- 获取数据,使用字典提取方式来进行。
- 提取的数据是字符串形式。
def login(request):
print(request.POST)
//返回信息:
<QueryDict: {'username': ['123'], 'pwd': ['abc']}>
POST后方法:
- get
对发送过来的数据进行指定提取,如果是列表,将只返回最后一个数据。
- getlist
对发送过来的数据进行指定提取,以列表形式进行返回。
if request.method == 'POST':
# {'stu_name': ['asdfd'], 'stu_age': ['123'], 'sex': ['man'], 'cla_name': ['1', '2']}> 获取的格式
rece_data = request.POST
add_stu_name = models.stu_user.objects.create(stu_name=rece_data.get('stu_name'),
stu_age=rece_data.get('stu_age'),
stu_sex=rece_data.get('sex'))
add_stu_name.cla_stu_id.set(rece_data.getlist('cla_name'))
-
request.path_info(URL的路径)
- 只会返回访问的路径,参数、端口、IP地址都不会显示。
def login(request):
print(request.path_info)
//返回信息:
/init/
-
request.get_full_path(URL的路径)
- 是request的方法,和上面的功能一样,但返回路径的同时带有后面的参数值
def login(request):
print(request.get_full_path())
//返回信息:
/init/?id=1&name=zhao
-
request.body(请求体)
- 是http协议中,客户端向服务器端发送的请求体。
- betys类型
- get没有相关的请求体,只有post有
def login(request):
print(request.body)
//返回信息:
b''
-
request.scheme(请求方式)
- 用户请求的协议,http或https
- 以字符串形式表示
def login(request):
print(request.scheme)
//返回信息:
http
-
request.is_secure(判断请求方式是否安全)
- 如果是https则返回True,http返回False
-
request.FILES(文件处理)
提取数据:
def login(request):
print(request.FILES)
# <MultiValueDict:{'file_handle':[<InMemoryUploadedFile:123.jpg (image/jpeg)>]}>
-
request.META(获取请求头)
- 获取发送请求的请求头信息
- 获取到的格式会不一样,需要哪些字段就需要自行筛查
-
request.COOKIES()
-
request.session()
response(返回数据)
用于返回给请求端的信息
from django.shortcuts import HttpResponse ,render,redirect
-
HttpResponse(以字符串形式返回)
- 返回第一个值必须是request
- 会以字符串形式进行返回给用户。
- 当返回的是一个字典格式时,则显示的key,如果需要
def login(request):
return HttpResponse(request,'hello')
-
render(以文件形式返回)
- 返回第一个值必须是request
- 会以文件形式返回用户
- 第三个值是从数据库中返回的QuerySet数据类型。可以将数据返回给html中
def login(request):
#从数据库获取数据信息
all_list = models.User.objects.all()
#返回给login.html文件
return render(request, 'login.html',{'all_list':all_list})
{% for list in all_list %} #用于逻辑信息提取
<div>
<span>{{list.id}} #用于变量信息
<span>{{list.username}} #用于变量信息
</div>
{% endfor %} #结束语句
-
redirect(重定向)
- 重定向一个新的网页,而不是只给用户一个数据而已。
- 返回重定向后,浏览器查看Location,如果有信息会向网址重新发送一个get请求。
- 如果请求的是自己的页面,那么就直接在URL内输入'/连接'即可,写的是urlpatterns内设置的连接。
- 如果不写/,那么就会无限拼接原有的连接。
def login(request):
return redirect('https://www.baidu.com')
return redirect('/index/')
重定向的使用情况
-
JsonResponse(json格式的返回)
- 在前后端分离时,只需要在后端进行数据的发送即可,所以都会使用json格式进行收取和发送。
- 如果使用常规的json转换,那么返回页面后还需要反序列化。
- 使用JsonResponse后,请求返回后,由于content-type的不同,会自动进行反序列化
- 这样将会导致前端收取收据后直接可以使用里面的内容,而不用再反序列化操作。
- 如果需要在其内传输非字典格式数据,那么要在data后加safe=False
- 可以附带字典类型,前端直接data.xxx即可出现结果。
from django.http.response import JsonResponse
def json_data(request):
return HttpResponse(json.dumps({})) #Content-Type:text/html; charset=tuf-8
return JsonResponse({}) #Content-Type:application/json
return JsonResponse([],safe=False) #Content-Type:application/json
#如果不使用JsonResponse,可以自行修改返回头的信息。
return HttpResponse(json.dumps(data),content_type = 'application/json')
-
reverse(命名URL反向解析)
使用reverse模块将配置好的命名URL地址提取
返回的是完整的路径名称
from django.urls import reverse
url(r'^index/(\d*)', views.index, name='index'),
def info(request):
reverse("index", args=("2018", ))