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

2025-08-03 09:50

本文主要是介绍Django中的函数视图和类视图以及路由的定义方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in...

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 China编程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: python响应对象,用于构造响应报文,并响应给用户
	"""
	# 响应数据调用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 imp编程ort path

from . import views

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程China编程(www.chinasem.cn)。

这篇关于Django中的函数视图和类视图以及路由的定义方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155577

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路