Django_类视图(五)

news2024/9/22 6:49:11

目录

类视图优点

使用方法

定义类视图

添加类视图路由

类视图原理

类视图的二次封装

类视图二次封装代码如下

编写视图

配置路由

访问url结果

源码等资料获取方法


类视图优点

使用django的函数视图,如果要让同一个视图实现不同的请求方式实现不同的逻辑,就需要在脚本中使用条件语句进行判断。

这样使用起来没有问题,但是如果再实现put、delete等其它请求方式,在代码可读性就会很差。

使用django提供的类视图就可以解决这个问题。

类视图可以将对应的不同请求方式以类中的不同方法来区别定义。

使用方法

定义类视图

# 导入类视图基类
from django.views import View

class RegisterView(View):
    """注册的类视图"""
    def get(self, request):
        """get请求调用方法"""
        return render(request, "register.html", {'msg': '类视图被调用'})

    def post(self, request):
        """postq请求调用方法"""
        # 获取请求参数
        username = request.POST.get("user_name")
        pwd = request.POST.get("pwd")
        email = request.POST.get("email")
        allow = request.POST.get("allow")

        # 校验参数合法性
        if not all([username, pwd, email]):
            return render(request, 'register.html', {'msg': '数据不完整'})

        if "@" not in email:
            return render(request, 'register.html', {'msg': '邮箱格式错误'})

        if allow != "on":
            return render(request, 'register.html', {'msg': '请同意并勾选协议'})

        # 校验账户是否已被使用
        try:
            # 未获取到用户会抛出DoesNotExist异常
            User.objects.get(username=username)
            return render(request, 'register.html', {'msg': '用户名已存在'})
        except ObjectDoesNotExist:
            pass

        # 业务处理
        user = User()
        user.username = username
        user.password = pwd
        user.email = email
        user.is_active = 0
        user.save()

        # 返回响应数据
        return render(request, "register.html", {'msg': '注册成功'})

添加类视图路由

from django.urls import path
from . import views

# 定义命名空间
app_name = "user"

urlpatterns = [
    # path("register/", views.register, name="register"),
    path("register/", views.RegisterView.as_view(), name="register")    # 添加类视图路由
]

类视图原理

当路由配置的 views.RegisterView.as_view() 被执行时,调用如下方法

dispatch根据实例请求分发调用

类视图的二次封装

对类视图进行二次封装后,我们可以将路由、命名空间这些信息配置在类视图中

类视图二次封装代码如下

from django import urls
from django.views import View


class BaseView(View):
    path_type = "path"
    url = None
    name = None

    @classmethod
    def as_view(cls, **initkwargs):
        view = super(BaseView, cls).as_view()
        path = getattr(urls, cls.path_type)
        return path(cls.url, view, name=cls.name)

编写视图

# 导入封装的视图
from utils.base_view import BaseView


class DemoView(BaseView):
    path_type = "path"  # 使用path方法添加url
    url = "demotest/"
    name = "demo"       # 定义反向解析url的名称

    def get(self, request):
        return HttpResponse("hello python!")

配置路由

from apps.user.views import DemoView

urlpatterns = [
    DemoView.as_view()
]

访问url结果


源码等资料获取方法

各位想获取源码的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio实现内容丰富的安卓社交论坛平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号085 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.视…

静态路由介绍

目录 静态路由配置方法(基本配置): 静态路由的拓展配置 负载均衡 1.环回接口——测试 2.手工汇总——子网汇总 3.路由黑洞(黑洞路由) 4.缺省路由 5.空接口——NULL 0 静态路由配置方法(基本配置)&#xff1…

【Linux】Linux下的项目自动化构建工具——make和makefile

❤️前言 大家好,好久不见!今天小狮子为大家带来的文章是一篇关于Linux下的项目自动化构建工具——make和makefile的博客,希望能帮助到大家。 正文 当我们进行涉及多文件的工程开发时,我们需要对很多不同类型、不同功能&#xff…

如何查看论文被引用情况

Dimensions上汇聚了多种类型的学术成果(期刊、图书、专利、临床试验),它好的地方在于可将论文与被引用情况、研究资金来源、相关临床试验、专利信息以及政策文件全部关联起来,从而对一项研究进行了从起源到结果的全方位描述。 网…

第九十九天学习记录:C++核心:类和对象Ⅴ(五星重要)友元运算符重载

友元 在程序里&#xff0c;有些私有属性也能让类外特殊的一些函数或者类进行访问&#xff0c;就需要用到友元的技术 友元的目的就是让一个函数或者类访问另一个类中私有成员 友元的关键字为frirend 友元的三种实现 1、全局函数做友元 #include<iostream> using namespa…

vue 使用百度地图记录

参考文档 https://lbsyun.baidu.com/index.php?titlejspopular3.0/guide/infowindow https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a0b0 1.百度地图标注点点击出现infoWindow信息窗口添加点击事件 var opts {width: 200, // 信息窗口宽度height:…

【TS】学习笔记

1、所有的JavaScript代码都是有效的Typescript代码&#xff0c;用TypeScript编译器编译TypeScript里的Javascript代码&#xff0c;编译后的结果与原始的Javascript代码一模一样&#xff0c;即文件扩展名从.js改为.ts&#xff0c;不会造成任何负面的影响 2、JavaScript代码迁移…

idea将代码片段提取成一个方法快捷方式

CtrlAltM 今天写代码发现有的方法太长了&#xff0c;为了使我们的代码更加简洁&#xff0c;就可以使用idea的这个功能 效果如图 改造前&#xff1a; 提取出两个方法 如何使用

Bootloader Design of PIC18 series MCU - 进阶篇

1.遭遇到问题 在&#xff1a;PIC18 Bootloader 设计基础 一文中&#xff0c;我们讨论了Bootloader与上层应用APP各自编译的方法。在ROM上的空间分配、以及跳转、中断的处理等内容。那篇文章包含了所有与PIC单片机Bootloader设计相关的技术问题。但是距离一个真正可用的Bootloa…

python接口自动化(二十一)--unittest简介(详解)

简介 前边的随笔主要介绍的requests模块的有关知识个内容&#xff0c;接下来看一下python的单元测试框架unittest。熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG&#xff0c;这个招聘的需求上也是经常见到的。python 里面也有单元 测试框架-unitt…

element table列表根据数据设置背景色

效果 页面代码 通过:cell-class-name动态绑定类名 <el-table :data"tableData" style"width: 100%" :cell-class-name"myclass"><el-table-column prop"date" label"日期" width"180"> </el-ta…

pytest测试框架的基本使用与介绍

pytest介绍 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要特点有以下几点&#xff1a; 1、简单灵活&#xff0c;容易上手&#xff0c;文档丰富&#xff1b; 2、支持参数化&#xff0c;可以细粒度地控制要测试的测试用例&#xff1b; 3、能够支持简单的单元测…

Jenkins---jenkins生成Allure报告

目录 前言 Allure插件安装 生成Allure报告 遇到的问题 总结&#xff1a; 前言 前几天介绍了如何生成html报告&#xff0c;目前绝大部分公司都是用的allure报告&#xff0c;那么今天也介绍下如何通过jenkins生成allure报告。 Allure插件安装 jenkins中存在支持allure报告…

Pytorch从入门到精通:一、准备工作与查询函数

之前虽然做了不少计算机视觉的项目&#xff0c;但是如果让我从0还是用Pytorch开始写的话还是有一点难度。原因就在于没有系统的学习Pytorch&#xff0c;对于里面的不少模块都只知道使用&#xff0c;不知道原理&#xff0c;知道它能工作&#xff0c;但是不知道怎么样工作的。所以…

QT - 20230707

登录界面练习 #include "loginwindow.h"QIcon fetchIconWithName(QString name) {QString res "../login/images/" name;return QIcon(res); }LoginWindow::LoginWindow(QWidget *parent): QMainWindow(parent) {this->resize(600, 800);this->se…

小红书私信软件:把微信二维码联系方式隐藏在图片中推广引流找客源

小红书私信软件&#xff1a;把微信二维码联系方式隐藏在图片中推广引流找客源,小红书还能这么玩&#xff1f;小红书暑期聊天功能上新了&#xff0c;共享收藏夹、斗图神器&#xff0c;暑期表情&#xff0c;笔记表态....快去和好友一起解锁新功能吧&#xff01; #小红书 最近发现…

YOLOv5-第Y1周:调用官方权重进行检测

YOLOv5-第Y1周&#xff1a;调用官方权重进行检测 YOLOv5-第Y1周&#xff1a;调用官方权重进行检测一、前言二、我的环境三、下载源码四、运行代码五、视频检测八、总结 YOLOv5-第Y1周&#xff1a;调用官方权重进行检测 一、前言 &#x1f368; 本文为&#x1f517;365天深度学…

【Redis-工具类】自定义Redis工具类并使用其进行简单操作

【Redis-工具类】自定义Redis工具类并使用其进行简单操作 1&#xff09;自定义 Redis 工具类2&#xff09;工具类的简单使用 1&#xff09;自定义 Redis 工具类 package gaei.cn.x5l.x5lhive2cos.utils;import gaei.cn.x5l.x5lhive2cos.CosDataBackupHistory; import gaei.cn.…

AI智能化数据分析,赋能文旅直播发展新赛道

一、文旅直播发展背景 近期&#xff0c;旅游业市场呈现火热态势。暑期旅游市场预计迎来新一轮旅游小高峰&#xff0c;旅游业进入结构性复苏新阶段。而随着社交媒介的普及与旅游直播的兴起&#xff0c;全国多地文旅“出圈”形成热议。 对于文旅产业发展来说&#xff0c;高品质…

【如何在工作中保持稳定的情绪 --- 保持稳定情绪的7个工作技巧】

导语&#xff1a; 在现代工作环境中&#xff0c;保持稳定的情绪是一项至关重要的技能。当我们遇到挑战、压力和严峻的工作条件时&#xff0c;情绪的稳定性对于我们的工作效率和心理健康至关重要。本文将分享七个实用的工作技巧&#xff0c;帮助你保持稳定的情绪并提升工作质量…