Django内置函数详解Httprequest详解(模拟搜索/模拟用户登陆/模拟上传文件功能)
Posted 运维.大白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django内置函数详解Httprequest详解(模拟搜索/模拟用户登陆/模拟上传文件功能)相关的知识,希望对你有一定的参考价值。
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.根据客户端特定信息作相应处理,例如根据请求方法
以上是关于Django内置函数详解Httprequest详解(模拟搜索/模拟用户登陆/模拟上传文件功能)的主要内容,如果未能解决你的问题,请参考以下文章