一文带你学会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:


目录
相关文章
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
342 0
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
210 2
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
230 1
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
Django 如何使用视图动态输出 CSV 以及 PDF
122 4
|
API 数据库 数据安全/隐私保护
Django配置api、管理系统和视图
Django配置api、管理系统和视图
291 1
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
这一篇我们需要用到 python 的 csv 和 reportLab 库,通过django视图来定义输出我们需要的 csv 或者 pdf 文件。
|
Go 调度 Python
Django 视图探秘:FBV与CBV注册方式的异同,揭秘as_view()的执行魔法
Django 视图探秘:FBV与CBV注册方式的异同,揭秘as_view()的执行魔法