一、视图函数对应的文件和文件夹
1、文件
2、文件夹–当有很多的业务功能时,一个视图函数文件不满足业务需求,需拆分成多个视图函数文件
二、绝对导入和相对导入 urls
1、绝对导入
2、相对导入
## 3、注意事项
注意实现:不要再项目根目录做相对导入。
原则:
- 绝对导入
- 相对导入(层级深)
三、视图函数参数分析–requests
1、requests是什么呢?
对象,包裹,可以放很多东西。
requests是一个对象,存放了浏览器给咱们发过来的所有内容,所以含有:
- 请求相关所有的数据: 当前访问的url、请求方式、…
- django额外添加的数据–比如处理的当前对象
def user_add(request):
#1 获取当前的URL /user/add
print(request.path_info)
#2、URL传递的参数
print(request.GET)
print(request.GET.get('age'))
# 3、获取请求方式
print(request.method)
# 4、如果是POST请求,传递请求体(原始数据)
# b'{"name":"lxindf","age":"34"}
print(request.body)
# 4.1 请求体+ 请求头
# b'mobilephone=13131567898&pwd=123456®name=%E5%8F%8D%E5%80%92%E6%98%AF'
# Content-Type:application/x-www-form-urlencoded
print(request.POST)
print(request.POST.get('regname'))
print(request.POST.get('mobilephone'))
print(request.POST.get('pwd'))
# 4.2 请求体+请求头 文件
print(request.FILES) # 文件格式 + multipart/form-data
print(request.FILES.get("n1"))
print(request.FILES.get("n2"))
return HttpResponse("新增用户")
2、post请求,请求原始数据
四、视图函数返回值(涉及重定向)
- HttpResponse
- JsonResponse
- render
- redirect
from django.shortcuts import HttpResponse, redirect, render
from django.http import JsonResponse
def auth(request):
pass
def login(request):
# 1.获取请求数据
print(request)
# 2.根据请求数据进行条件的判断 GET/POST GET.get("xx") POST.get("xx")
# 3.返回数据
# 3.1 字符串/字节/文本数据(图片验证码)
return HttpResponse("login")
# 3.2 JSON格式(前后端分离、app小程序后端、ajax请求)
data_dict = {"status": True, 'data': [11, 22, 33]}
return JsonResponse(data_dict)
# 3.3 重定向---redirect 方法
#重定向到外部的百度地址,需要写完整地址
return redirect("https://www.baidu.com")
# 重定向到内部的地址,IP或域名及端口可以不用写,直接写接口名
return redirect("http://127.0.0.1:8000/api/auth/")
return redirect("http://127.0.0.1:8000/api/auth/")
# 重定向的三种写法
# 写法1,直接通过redirect 到接口名称
return redirect("/api/auth/")
# 写法2,通过reverse方法 通过路由name 返回一个URL,再通过redirect重定向到reverse返回的URL上
from django.urls import reverse
url = reverse("auth")
return redirect(url) # name
# 写法3,直接redirect到路由的name 别名,不建议使用这种方法
return redirect("auth")
# 3.4 渲染--render 方法
# - a.找到 'login.html' 并读取的内容,问题:去哪里找?
# - 默认先去settings.TEMPLATES.DIRS指定的路径找。(公共)
# - 按注册顺序每个已注册的app中找他templates目录,去这个目录中寻找'login.html'
# - 一般情况下,原则,那个app中的的模板,去哪个那个app中寻找。
# - b.渲染(替换)得到替换完成的字符串
# - c.返回浏览器
return render(request, 'api/login.html')
五、视图函数返回值的响应头和响应体
1、浏览器拿到返回值就将响应体渲染给到用户
2、给返回这设置响应头
用法,前后端分离的项目涉及到的token值的设定,cors跨越的问题
from django.shortcuts import HttpResponse, redirect, render
from django.http import JsonResponse
def login(request):
res = HttpResponse("login")
res['xx1'] = "hahaha"
res['xx2'] = "hahaha"
res['xx3'] = "hahaha"
res.set_cookie('k1',"aaaaaaaa")
res.set_cookie('k2',"bbbbbb")
return res