视图函数,接受Web请求并且返回Web响应(必须返回响应)
响应可以是一张网页的HTML内容,一个重定向,一个404错误
from django.shortcuts import render, HttpResponse,redirect
def current_datetime(request):
    html = "<html><body>你好</body></html>" 
    return HttpResponse(html)
每个视图函数都需要接收请求和返回响应,使用HttpRequest对象作为第一个参数,
并且通常称之为request。每个视图函数都负责返回一个HttpResponse对象,其中包含生成的响应

    Request对象     

request属性:

django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest类中的属性

1. request.method 获取请求的方法

值为一个字符串,"GET"、"POST",必须使用大写
对请求方法进行判断if request.method=="POST":pass

2.request.GET 通常用来获取URL里面的参数

值为QueryDict对象,类似于字典,包含HTTP GET的所有参数

如:127.0.0.1:8000/edit_book/?id=1&name=jerd
request.GET --> {"id":1, "name":"jerd"}
request.GET.get("id") #1

3.request.POST 用来获取POST提交过来的数据

1.POST请求可以带有空的POST字典,如果通过POST发送一个表单,但是表单中没有任何的数据,
QueryDict 对象依然会被创建。
2.如果使用POST上传文件的话,文件信息将包含在FILES属性中
request.FIlES.get('upload_file')
3.键值对的值是多个的时候,比如checkbox类型的input标签,select标签
需要用request.POST.getlist("hobby")

4.request.path_info

获取用户请求的路径(不包含IP和端口和URL参数)
在网页上输入http://127.0.0.1:8000/t_test/
print(request.path_info)  结果:/t_test/

5.request.get_full_path()

在网页上输入http://127.0.0.1:8000/t_test/
print(request.get_full_path())  结果:/t_test/
在网页上输入http://127.0.0.1:8000/t_test/?page=5
print(request.get_full_path())  结果:/t_test/?page=5

6.request.FILES

一个类似于字典的对象,包含所有的上传文件信息。
print(request.FILES)  #{'upload_file': [<InMemoryUploadedFile: 0020033025290064_b.jpg (image/jpeg)>]}>
file_obj=request.FIlES.get('upload_file')
在使用form表单提交文件时,表单中必须带有enctype="multipart/form-data
否则FILES将为一个空的QueryDict

上传文件

'''
urls文件
from django.conf.urls import url
from app import views
url(r'^upload/', views.upload),
html文件
enctype必须要写  form中的input必须有name属性,且注意csrf阻拦
<form action="/upload/,method="post",enctype="multipart/form-data>
{% csrf_token %}
< input type = "file" name = "upload_file" >
< input type = "submit" value = "开始上传" >
</form>
views文件
from django.shortcuts import HttpResponse,render,redirect
def upload(request):
    if request.method=="POST":
        file为页面上type = files类型input的name属性值 
        print(request.FILES)  #{'upload_file': [<InMemoryUploadedFile: 0020033025290064_b.jpg (image/jpeg)>]}>
        file_obj=request.FIlES.get('upload_file')
       filename=file_obj.name
    with open(filename,"wb") as f:
        # 从上传的文件对象中一点一点读
        for chunk in request.FILES['file'].chunks():
            f.write(chunk)
        ##从上传的文件对象中一行一行
        for line in file_obj:
             f.write(line)
        return HttpResponse("上传成功")
    return render(request,"upload.html")

'''
View Code

相关文章: