Django内置函数详解Httprequest详解(模拟搜索/模拟用户登陆/模拟上传文件功能)

Posted 运维.大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django内置函数详解Httprequest详解(模拟搜索/模拟用户登陆/模拟上传文件功能)相关的知识,希望对你有一定的参考价值。

1.0 Djiango内置函数说明

函数名称
httpHttoResponseHttoResponse对象
httpStreamingHttpResponse响应可迭代对象
httpFileResponse下载文件
httpjsonResponse返回json
shortcutsrender响应HttoResponse对象,一个快捷函数
viewsgeneric view类视图继承的类
viewsdecorators csrf取消某视图csrf防护
contribadmin内建管理后台
contribauthlogin 登陆
contribauthlogout 退出
contribauthauthenticate 用户信息认证
contribauthdecorators login_required 登陆认证装饰器
contribauthmodels user 获取登陆用户信息
contribauthmodels Baseusermanager,abstractbaseuser 获取登陆用户信息
confsettings导入配置文件
dbconnection连接数据库

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详解(模拟搜索/模拟用户登陆/模拟上传文件功能)的主要内容,如果未能解决你的问题,请参考以下文章

django中的request对象详解

Django--view.py详解

django中的request对象详解

django的views里面的request对象详解大全

django之HTTPResponse和JsonResponse详解

Django之views.py详解