Django 类视图(Class-Based Views)速通笔记 ——把 GET / POST 写到一个类里,代码立刻清爽

举报
周杰伦本人 发表于 2025/08/31 20:50:34 2025/08/31
【摘要】 Django 类视图(Class-Based Views)速通笔记——把 GET / POST 写到一个类里,代码立刻清爽 一、为什么需要类视图函数视图 if-else 堆在一起,可读性差。也就是如果是get请求,进行什么逻辑,如果是post请求,进行什么逻辑面向对象:封装、继承、复用;Django 已写好基类,我们只需“填空”。函数视图用 if 判断方法,类视图用方法名区分方法。一个请求...

Django 类视图(Class-Based Views)速通笔记——把 GET / POST 写到一个类里,代码立刻清爽

一、为什么需要类视图

  1. 函数视图 if-else 堆在一起,可读性差。也就是如果是get请求,进行什么逻辑,如果是post请求,进行什么逻辑

  2. 面向对象:封装、继承、复用;Django 已写好基类,我们只需“填空”。

函数视图用 if 判断方法,类视图用方法名区分方法。

一个请求 URL → 视图 → 响应
所谓视图就是 Django 收到 HTTP 请求后真正干活的那一段 Python 代码。
相当于java里的后台处理逻辑

所谓类视图就是用类来写视图

二、最小可运行示例

  1. views .py
from django.views import View           # 1. 引入基类
from django.http import HttpResponse

class LoginView(View):                  # 2. 继承 View
    def get(self, request):             # 3. 处理 GET
        return HttpResponse("get login page")

    def post(self, request):            # 4. 处理 POST
        return HttpResponse("post login data")

引入基类

继承 View

处理 GET请求 处理 POST请求

  1. urls.py
from myapp.views import LoginView

urlpatterns = [
    # 注意 .as_view() 必须带括号!
    path('163login/', LoginView.as_view()),
]

三、三步记忆法

① 继承 View
② 方法名必须小写:get、post、put、delete、patch、head、options、trace
③ 路由用 类名.as_view()(带括号)

四、常见坑

  • 忘写 as_view()takes 1 positional argument but 2 were given

  • 方法名写成 Get/POST → 405 Method Not Allowed

  • 忘记 csrf_token:POST 表单仍会 403

五、下一步拓展

  • TemplateView 一行渲染模板

  • LoginRequiredMixin 一行做登录验证

  • ListView / CreateView 一行完成增删改查

把这段模板抄进项目,GET 与 POST 从此各就各位,代码整洁度直线上升。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。