Django中的函数视图和类视图以及路由的定义方式

 更新时间:2025年08月02日 14:32:10   作者:蓝小白1024  
Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过include()整合子应用路由,需注意请求方式判断及装饰器限制

Django允许接收的请求方法

http_method_names = [‘get', ‘post', ‘put', ‘patch', ‘delete', ‘head', ‘options', ‘trace']

函数视图

  1. 函数视图它是一个标准的Python函数
  2. 函数视图中, 第一个参数必须定义: 第一个参数为请求对象, 用于接收用户发送的请求报文.
  3. 在函数视图中, 必须返回响应对象: 用于构成响应报文, 并响应给用户
  • 请求对象: HTTPRequest() 对应的对象
  • 响应对象: HTTPResponse() 对应的对象
from django import http

# 创建一个函数视图
def text_view(request):
	"""
	函数视图
	:param request:包含请求报文信息,请求对象
	:return: 响应对象,用于构造响应报文,并响应给用户
	"""
	# 响应数据调用http
	return http.HTTPResponse("数据data")

这里如果有请求路径相同, 但是请求方式不同, 就需要在函数视图内加一个判断

def text_view(request):
	"""
	函数视图
	:param request:包含请求报文信息,请求对象
	:return: 响应对象,用于构造响应报文,并响应给用户
	"""

	# 先判断请求方法是什么如"GET","POST"
	if request.method == "GET":
		# 处理GET请求
		return http.HTTPResponse("数据data")
	elif request.method == "POST":
		# 处理POST请求
		return http.HTTPResponse("数据data")

在一些接口需要限制请求方式时可以使用装饰器require_http_methods

from django.views.decorators.http import require_http_methods

# 添加一个装饰器进行限制,请求方式大写
@require_http_methods(['GET'])
def text_view(request):
	"""
	函数视图, 限制请求方式,只能使用GET进行访问,其他访问方式会报错405
	:param request:包含请求报文信息,请求对象
	:return: 响应对象,用于构造响应报文,并响应给用户
	"""
	# 响应数据调用http
	return http.HTTPResponse("数据data")

类视图

类视图是一个Python类

定义类视图时需要继承Django中的提供的父类视图 View

在类视图中

  • 需要定义跟请求方法同名的函数来对应不同的请求方式
  • 在请求方法同名的函数中,还必须定义一个接收请求的参数(跟函数视图一样)
  • 在请求方法同名的函数中, 也必须返回一个相应对象
from django.views import View


class CodeView(View):
	"""
	类视图
	"""
	def get(self, request)
		"""
		处理GET请求
		"""
		return http.HttpResponse("数据")

	def post(self, request)
		"""
		处理POST请求
		"""
		return http.HttpResponse("数据")

   		...

路由

定义路由的方法:path()、re_path()、url()

  • Django1.x版本:url()
  • Django2.x版本:path()、re_path()

说明:

  • 为了在版本迭代中,保留旧版本的路由系统,url()在新版中依然可用。
  • 并新增了一个url()的替代方案re_path(),所以url()几乎跟re_path()一样。

路由方法对比

  • path()
# 函数视图path()路由语法:
# path('网络地址正则表达式', 函数视图名),

# 类视图path()路由语法:
# path('网络地址正则表达式', 类视图.as_view()),
path()路由语法中,不需要定义正则表达式严格的开头和结尾,因为已经封装好了
  • re_path()、url()
# 函数视图re_path()路由语法:
# re_path(r'^网络地址正则表达式$', 函数视图名),

# 类视图re_path()路由语法:
# re_path(r'^网络地址正则表达式$', 类视图.as_view()),
# 函数视图url()路由语法:
# url(r'^网络地址正则表达式$', 函数视图名),

# 类视图url()路由语法:
# url(r'^网络地址正则表达式$', 类视图.as_view()),
re_path()和url()路由语法中,必须要定义正则表达式严格的开头和结尾

总路由

在Django中一个子应用对应一个总路由

总路由中,使用include()子应用里面的所有路由都包含在工程总路由中

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    # 自带的后台管理系统的总路由:可以忽略
    path('admin/', admin.site.urls),

    # 总路由包含子路由语法
    # path('网络地址前缀/', include('子应用.urls')),
    # 或者
    # path('', include('子应用.urls')),

	# 例: 
    # 用户模块:http://127.0.0.1:8000/users/register/
    path('', include('users.urls')),
]

函数视图的路由

from django.urls import path

# 把当前文件下的视图文件导进来
from . import views


# urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
urlpatterns = [
    # 函数视图路由语法:
    # path('网络地址正则表达式', 函数视图名),

	# 例:
    # 用户注册:http://127.0.0.1:8000/users/register/
    path('users/register/', views.register),
]

类视图定义路由

from django.urls import path

from . import views

# urlpatterns是被Django自动识别的路由列表变量:定义该应用的所有路由信息
urlpatterns = [
    # 类视图路由语法:
    # path('网络地址正则表达式', 类视图.as_view()),

    # 用户注册:http://127.0.0.1:8000/users/register/
    path('users/register/', views.RegisterView.as_view()),
]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python使用Tkinter实现机器人走迷宫

    Python使用Tkinter实现机器人走迷宫

    这篇文章主要为大家详细介绍了Python使用Tkinter实现机器人走迷宫,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python中BeautifulSoup通过查找Id获取元素信息

    Python中BeautifulSoup通过查找Id获取元素信息

    这篇文章主要介绍了Python中BeautifulSoup通过查找Id获取元素信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • python中DataFrame数据合并merge()和concat()方法详解

    python中DataFrame数据合并merge()和concat()方法详解

    Pandas提供了很多合并Series和Dataframe的强大的功能,通过这些功能可以方便的进行数据分析,下面这篇文章主要给大家介绍了关于python中DataFrame数据合并merge()和concat()方法的相关资料,需要的朋友可以参考下
    2022-07-07
  • 如何利用Python 快速找到最大文件

    如何利用Python 快速找到最大文件

    现在的电脑差不多都是固态硬盘了,速度很快,但容量不会太大,经常会出现磁盘空间不足的情况,怎么办,删除那些不重要的最大的文件是最有效的办法,这篇文章我们就来介绍介绍了如何利用Python 快速找到最大文件,需要的朋友可以参考一下
    2021-11-11
  • 利用Python解决构造回文字符串问题的方法

    利用Python解决构造回文字符串问题的方法

    回文字符串是指正读和反读都相同的字符串,例如"aba"或"abba",构造回文字符串问题通常涉及从给定字符串中删除某些字符,以形成最长的回文子序列,或者计算形成回文所需的最小删除次数,本文将详细介绍如何使用Python和动态规划算法来解决构造回文字符串问题
    2025-04-04
  • Python爬虫与防反爬虫策略从入门到实战

    Python爬虫与防反爬虫策略从入门到实战

    本文将从基础的爬虫原理和库介绍开始,逐步深入,通过实际示例代码,带领读者学习Python爬虫的使用和技巧,掌握从简单到复杂的爬虫实现
    2024-01-01
  • python os用法总结

    python os用法总结

    本篇文章给大家分享了关于python os用法的相关总结性内容,对此有学习需要朋友参考下吧。
    2018-06-06
  • PyTorch实现卷积神经网络的搭建详解

    PyTorch实现卷积神经网络的搭建详解

    这篇文章主要为大家介绍了PyTorch实现卷积神经网络的搭建详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python实现更改图片尺寸大小的方法(基于Pillow包)

    Python实现更改图片尺寸大小的方法(基于Pillow包)

    这篇文章主要介绍了Python实现更改图片尺寸大小的方法,结合实例形式分析了Python基于Pillow包更改图片属性的相关技巧,需要的朋友可以参考下
    2016-09-09
  • python库pydantic数据验证和设置管理库的用途

    python库pydantic数据验证和设置管理库的用途

    pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍python库pydantic数据验证和设置管理库的用途,感兴趣的朋友跟随小编一起看看吧
    2025-09-09

最新评论