Django框架(九):请求与响应

2019-05-05  本文已影响0人  加州旅馆_6741

一 . 请求 HttpRequest objects

Django把请求的元数据都封装到请求对象中

1. 常用属性

#判断一个请求的方法是POST还是GET
if request.method == 'GET':
  pass

2.Form表单

通过标签form,收集表单数据,返回给后端
form标签必须指定两个属性:

下面用一个简单的验证用户名密码登录页面做例子:
login.html

<form action="" method="post">
    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <p><input type="submit" value="登录"></p>
    {% csrf_token %}
</form>

views.py

def login (request):
    '''
    用户:
    1.访问登录页面 GET
    2.填写用户名密码提交 POST
    服务器:
    1.先判断请求方式
    2.如果是GET就返回登录页面
    3.如果是POST 就接收用户名 密码 效验
    4.如果登录成功会返回首页
    '''
    if request.method == 'GET':
        return render(request,'teacher/login.html')
    elif request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == '小明' and password == '123456':
            home_url = reverse('teacher:home')
            return redirect(home_url)
        else:
            return HttpResponse('用户名密码错误')
补充:一键多值的获取

当一个键值对中有多个值,get方法没有办法获取全部的值,必须用到getlist方法

<body>
<form action="" method="post">
    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <p><input type="submit" value="登录"></p>
    <p>爱好:打球<input type="checkbox" name="hobby" value="1">看书 <input type="checkbox" name="hobby" value="2"></p>
    {% csrf_token %}
</form>
</body>

在视图函数中用到getlist方法,才能获取到这个复选框标签的所有值

        hobby = request.POST.getlist('hobby')

3.文件的上传

UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')
<body>
<form action="" method="post" enctype="multipart/form-data">
    <h1>上传文件</h1>
    <input type="file" name="file">
    <input type="submit" value="上传">
    {% csrf_token %}
</form>
from crm.settings import UPLOAD_ROOT

def upload_file_view (request):
    if request.method == 'GET':
        return render(request, 'teacher/upload.html')
    else:
        file = request.FILES.get('file')
        file_path = os.path.join(UPLOAD_ROOT,file.name)
        with open(file_path,'wb') as f:
            for line in file.chunks():
                f.write(line)
        return HttpResponse('上传完毕')

如果要上传多个文件,请做如下修改

<form action="" method="post" enctype="multipart/form-data">
    <h1>上传文件</h1>
    <input type="file" name="file" multiple>  #上传多个文件,添加multiple属性
    <input type="submit" value="上传">
    {% csrf_token %}
</form>
def upload_file_view (request):
    if request.method == 'GET':
        return render(request, 'teacher/upload.html')
    else:
        files = request.FILES.getlist('file')    #用getlist获取多个文件
        for file in files:
            file_path = os.path.join(UPLOAD_ROOT, file.name)
            with open(file_path,'wb') as f:
                for line in file.chunks():
                    f.write(line)
        return HttpResponse('上传完毕')

二、响应 HttpResponse 对象

响应对象,需要手动创建
我们编写的视图,负责实例化,填充和返回响应对象

常用的属性:

常用的方法:

常用子类:

上一篇 下一篇

猜你喜欢

热点阅读