请求
# http://127.0.0.1:8000/user/tel/13800000000/?username=coco&age=13&age=18
# 视图函数第一个参数就是请求对象,由django传递
def get_phone(request, phone):
# request常用属性
# GET
print(request.GET) # Get quersetDict
# 获取单一值
print(request.GET.get("username"))
# 获取多值
print(request.GET.getlist("age")) # 返回值是一个列表 ['13', '18']
# POST
print(request.POST.get("username"))
print(request.POST.getlist("hobby"))
# 其他
print(request.method) # 请求方式
print(request.path) # 请求路径
print(request.META) # 其他请求属性
print(request.META.get("REMOTE_ADDR")) # 主机地址
print(request.META.get("HTTP_REFERER")) # 来源页面
# 常用方法
print(request.get_full_path()) # 带参数的请求路径
print(request.get_host()) # 主机地址和端口
print(request.build_absolute_uri()) # 完整的请求路径
print(request.GET.dict()) # 获取请求参数的字典,由querydict转为dict
return HttpResponse(phone) # 返回给用户的是响应对象
响应
def handle_reponse(request):
# HttpResponse 返回文本格式
res = HttpResponse("响应对象")
res.content_type = "text/html" # 响应头Content-Type
res.status_code = 400 # 设置响应状态码
return res
# render返回html页面
res = render(request, "index.html")
return res
# JsonResponse 返回json字符串
# 一般是可以把字典和列表转换成json字符串返回给前端;字典和列表只能包含内置类型
return JsonResponse({"name": "coco"})
# 如果参数不是字典,必须加上safe=False:不校验返回格式
return JsonResponse([1, 2, 3], safe=False)
# 重定向
def handle_redirect(request):
# HttpResponseRedirect():重定向到指定路由地址,参数就是路由,快捷方式 redirect()
# 正向定位
return redirect('/user/') # 不带参数
return redirect("/user/{}/{}".format("coco",12)) # 带参数
# 反向定位: 由应用命名空间:name来确定路由
# 需要在子应用的urls.py中加上 app_name="App" 应用的命名空间
return redirect(reverse("App:index")) # 不带参数
return redirect(reverse("App:phone",args=("13800000000",))) # 带参数
# 如果参数有名字,必须使用kwargs关键字传参的方式
return redirect(reverse("App:phone",kwargs={"name":"admin","age":20})) # 带参数