视图层
视图函数必须要返回一个HttpResponse对象
request对象方法
request.method #返回的是全大写字符串
def login(request):
if request.method=='POST':
#request.POST获取用户POST请求提交的普通键值对,不包括文件数据
print(request.POST) #结果是一个字典
#键值对的值是列表,但是get方法只取列表最后一个元素
username=request.POST.get('username')
print(username,type(username))
#getlist会将整个列表都取出来
hobby=request.POST.getlist('hobby')
print(hobby,type(hobby))
return HttpResponse('本来无一物,何处惹尘埃')
#如果是get请求,会直接执行这行代码
return render(request,'login.html')
'''
<QueryDict: {'username': ['page'], 'password': ['123'], 'hobby': ['1', '2', '3']}>
page <class 'str'>
['1', '2', '3'] <class 'list'>
'''
#request.GET和request.POST的用法一样的
#request.GET获取用户GET请求提交的普通数据
'''
get请求携带的数据有大小限制,大约4KB
post请求没有限制
print(request.GET.get('hobby'))
print(request.GET.getlist('hobby'))
'''
JsonResponse对象
继承了HttpResponse类
django后端给前端返回Json格式的数据
#方式一
#自己加ensure_ascii=False,表示不自动转换编码
import json
def a_json(request):
user_dict={'user':'page在学习','age':18}
json_str=json.dumps(user_dict,ensure_ascii=False)
return HttpResponse(json_str)
#方式二
#使用JsonResponse对象
from django.http import JsonResponse
def a_json(request):
user_dict={'user':'page在学习','age':18}
#加这个json_dumps_params={'ensure_ascii':False}参数,表示不自动转换编码
return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
# l=[1,2,3]
# return JsonResponse(l,safe=False)
#JsonResponse默认只能序列化字典,序列化其他类型数据需要加safe=False参数
form表单上传文件及后端处理
request.POST #只能获取普通键值对数据,不包含文件,
request.FILES #用来获取文件
def a_file(request):
if request.method=='POST':
# print(request.FILES)
file_obj=request.FILES.get('file')
# print(file_obj.name)
#是wb模式,rb模式报错,因为这个文件在后端还不存在
with open(file_obj.name,'wb') as f:
for line in file_obj.chunks():
f.write(line)
return render(request,'file.html')
request对象方法补充
print(request.path)
print(request.path_info)
print(request.get_full_path()) #能够获取完整的url以及问号后面的参数
print(request.get_full_path_info()) #能够获取完整的url以及问号后面的参数
http://127.0.0.1:8000/app01/a_file/?user=page
'''
/app01/a_file/
/app01/a_file/
/app01/a_file/?user=page
/app01/a_file/?user=page
'''
#浏览器发给后端的原生的二进制数据
request.body
request.META 把一些不常用的东西封装到这个字典里,比如客户端IP
浙公网安备 33010602011771号