1.0 Djiango内置函数说明
函数名称 | | |
---|
http | HttoResponse | HttoResponse对象 | http | StreamingHttpResponse | 响应可迭代对象 | http | FileResponse | 下载文件 | http | jsonResponse | 返回json | shortcuts | render | 响应HttoResponse对象,一个快捷函数 | views | generic view | 类视图继承的类 | views | decorators csrf | 取消某视图csrf防护 | contrib | admin | 内建管理后台 | contrib | auth | login 登陆 | contrib | auth | logout 退出 | contrib | auth | authenticate 用户信息认证 | contrib | auth | decorators login_required 登陆认证装饰器 | contrib | auth | models user 获取登陆用户信息 | contrib | auth | models Baseusermanager,abstractbaseuser 获取登陆用户信息 | conf | settings | 导入配置文件 | db | connection | 连接数据库 |
2.0 HTTP请求流程
HttoResponse含义 ·djiango会建立一个包含请求源数据的Httprequest对象,当djiango加载对应视图Httprequest对象将作为函数的第一个参数request,每个视图返回一个HttoResponse对象·
Httprequest对象:常用的方法
方法 | 描述 |
---|
request.get_host() | 服务器主机地址和端口 | request.get_port() | 服务器端口 | request.get_full_path() | 请求页面完整路径和查询参数 | request.get_raw_uri | 请求页面url所有信息,包含主机名,路径参数 | 测试 | | | |
HttpRequest对象:接收URL参数
打印第一个参数和第二个参数
print(request.GET["a"])
print(request.GET["b"])
HttpRequest对象:请求事例
1.表单GET提交,例如搜索页面
2.表单POST提交,例如登陆页面
实现如图所示的功能
2.1 配置路由
re_path('^login/',views.login,name='login')
2.2 配置视图
def login(request):
if request.method == 'GET':
return render(request,'login.html')
2.3 配置登陆页面login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h1>欢迎访问devops系统</h1>
<form action="">
用户名 :<input type="text" name="username"><br>
密码 : <input type="text" name="password"><br>
<button type="submit">登陆</button>
</form>
</body>
</html>
请求测试
http://127.0.0.1:8000/login/
2.4 实现密码登陆的逻辑
GET 明文,不适合传输敏感数据,例如文章id,数据表格id,搜索功能
POST 在http请求正文里,例如用户密码,上传文件
2.4.1 导入跳转模块redirect,修改视图,模拟密码登陆的请求场景并返回相应的结果
def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
print(request.POST)
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'zhangfan' and password == '123456':
return redirect('/')
else:
msg = '用户名或者密码错误!'
return render(request, 'login.html',{'msg':msg})
2.4.2 修改前端html页面
<span style="color: red;">{{ msg }}</span>
最终实现密码正确能跳转到首页 ,密码错误前端返回错误信息
3 实现上传图片,例如修改头像等
3.1 创建一个上传的路由
re_path('^user_upload/$', views.user_upload,name='user_upload')
3.2 编写视图 写一个上传user_upload的函数
def user_upload(request):
if request.method == "GET":
return render(request, 'upload.html')
elif request.method == "POST":
print(request.FILES)
obj = request.FILES.get('touxiang')
print(type(obj),obj.name)
import os
file_path = os.path.join('upload',obj.name)
with open(file_path,'wb') as f:
for i in obj.chunks():
f.write(i)
msg = "上传成功!"
return render(request, 'upload.html',{'msg':msg})
同级创建一个upload的文件目录
3.3 编写upload.html模版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form action="{% url 'user_upload' %}" method="post", enctype="multipart/form-data">
<input type="file", name="touxiang">
<button type="submit">提交</button>
<br>
<span style="color: red;">{{ msg }}</span>
</form>
</body>
</html>
3.4 上传一个图片测试测试 在本地upload目录下会显示刚才上传的图片,说明上传功能实现 request.GET应用场景: 1.获取客户端信息,请求页面的情况 2.接收客户端上传的数据和文件 3.根据客户端特定信息作相应处理,例如根据请求方法
|