一文带你学会Django视图

简介: 该视图返回一个HttpResponse对象,是一个字符串同时,在url处我们还要有一些操作,在项目主urls.py文件定义单个app中的urls.py路径


1.Django视图初探


一个最简单的视图:


from django.shortcuts import HttpResponse
def model_test(request):
    return HttpResponse("Hello World!")


该视图返回一个HttpResponse对象,是一个字符串

同时,在url处我们还要有一些操作,在项目主urls.py文件定义单个app中的urls.py路径:


path('post/', include('post.urls')),


在app中的urls.py文件中:


from django.urls import path
from . import views
urlpatterns = [
    path('watch/', views.model_test),
]


访问:http://127.0.0.1:8000/post/watch/



2.视图的请求与响应对象


HttpRequest


每当请求到来的时候,Django就会创建一个携带有请求元数据的HttpRequest对象,传递给视图函数的第一个参数


method:


method是一个字符串类型的值,标识请求所使用的HTTP方法,例如GET、POST、PUT等


def model_test(request):
    return HttpResponse("Hello World!" + request.method)
    # Hello World!GET


添加@csrf_exempt装饰器,用POST方法请求对应的URL,可以获得与GET请求同样的响应:


from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def model_test(request):
    return HttpResponse("Hello World!" + request.method)



有时候,可能需要明确只能接受特定的请求方法,Django也对此提供了支持,利用@require_http_methods装饰器指定视图可以接受的方法。例如,只允许接受POST请求,那么,可以这样配置:


from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
@csrf_exempt
@require_http_methods(["POST"])
def model_test(request):
    return HttpResponse("Hello World!" + request.method)


scheme:


标识请求的协议类型(http或https)


GET:


这是一个类字典对象,包含GET请求中的所有参数


def model_test(request):
    return HttpResponse("Hello World!" + request.GET.get('a', '0'))


此时访问路径:http://127.0.0.1:8000/post/watch/?a=1



POST:


与GET属性类似,POST属性中保存的是POST请求中提交的表单数据


FILES:


这个属性只有在上传文件的时候才会用到,它也是一个类字典对象,包含所有的上传文件数据。FILES属性中的每个键是中的name值,FILES中的每个值是一个UploadedFile


COOKIES:


它是一个Python字典(dict)对象,键和值都是字符串,包含了一次请求的Cookie信息


META:


一个Python字典对象,包含了所有的HTTP头部信息


CONTENT_LENGTH:标识请求消息正文的长度,对于POST请求来说,这个请求头是必需的。

CONTENT_TYPE:请求正文的MIME类型,对应于/post/hello/请求,它的值可以是text/plain。

HTTP_HOST:客户端发送的HTTP主机头。

HTTP_USER_AGENT:通常被称为UA,用于标识浏览器的类型,如果视图返回的数据是需要区分浏览器的,那么这个字段会非常有用。

REMOTE_ADDR:客户端的IP地址,这个字段通常用于记录日志或根据IP确定地域再做处理。

REMOTE_HOST:客户端的主机名。

REQUEST_METHOD:标识HTTP请求方法,例如GET、POST等。

SERVER_NAME:服务器的主机名。

SERVER_PORT:服务器的端口号,用一个字符串标识,例如“8000”。

user:


标识当前登录用户的AUTH_USER_MODEL实例,它其实是Django用户系统中的User(auth.User)类型


HttpResponse


status_code:


用来标识一次请求的状态。常见的状态码有200标识请求成功、404标识请求的资源不存在、500标识服务器内部错等


content:


存储响应内容的二进制字符串


write方法:


这个方法将HttpResponse视为类文件对象,可以向其中添加响应数据


操作响应头:


给HttpResponse添加响应头:


def model_test(request):
    response = HttpResponse()
    response['project'] = 'IMUSTCTF'
    response['app'] = 'post'
    return response


重新访问视图,查看响应头已经有了project和app:


目录
相关文章
|
5月前
|
XML 前端开发 JavaScript
Python 教程之 Django(5)视图基础
Python 教程之 Django(5)视图基础
40 1
|
7天前
|
XML JSON 前端开发
Django视图函数技巧,从入门到实战
Django视图函数技巧,从入门到实战
|
21天前
|
缓存 API 数据库
Django中的视图装饰器:扩展视图功能的利器
【4月更文挑战第15天】Django视图装饰器用于扩展视图功能,如权限验证、缓存控制和日志记录。它们是Python的高级特性,能不修改原始函数代码就添加新功能。Django提供内置装饰器,如`@login_required`(强制用户登录)、`@cache_page`(缓存视图输出)和`@csrf_protect`(CSRF保护)。同时,开发者可自定义装饰器,例如上面的`timing_decorator`用于记录视图执行时间。使用装饰器时要注意性能影响、执行顺序和参数处理。装饰器增强了代码复用性和可维护性。
|
21天前
|
缓存 数据库 开发者
Django视图中的缓存机制:提升页面加载速度
【4月更文挑战第15天】本文介绍了Django的缓存机制在提升页面加载速度中的作用。Django提供视图缓存和片段缓存,通过`cache_page`装饰器和`CacheMixin`实现视图级别的缓存,使用`{% cache %}`模板标签实现页面片段缓存。开发者可选择不同的缓存后端,并在设置中配置缓存参数。同时,注意合理控制缓存粒度、及时更新和管理缓存,以优化用户体验和网站性能。
|
4月前
|
Shell 数据库 Python
Python 教程之 Django(6)视图类型
Python 教程之 Django(6)视图类型
21 0
Python 教程之 Django(6)视图类型
|
4月前
|
XML 前端开发 JavaScript
Python 教程之 Django(5)视图基础
Python 教程之 Django(5)视图基础
28 1
Python 教程之 Django(5)视图基础
|
4月前
|
缓存 开发者 Python
Django 视图层
Django 视图层
47 0
|
5月前
|
Shell 数据库 Python
Python 教程之 Django(6)视图类型
Python 教程之 Django(6)视图类型
36 0
|
5月前
|
Shell 数据库 Python
删除视图——基于函数的视图 Django
删除视图——基于函数的视图 Django
22 0
|
5月前
|
Shell 数据库 Python
更新视图——基于函数的视图 Django
更新视图——基于函数的视图 Django
25 0