Django 类视图(Class-Based Views)速通笔记 ——把 GET / POST 写到一个类里,代码立刻清爽
【摘要】 Django 类视图(Class-Based Views)速通笔记——把 GET / POST 写到一个类里,代码立刻清爽 一、为什么需要类视图函数视图 if-else 堆在一起,可读性差。也就是如果是get请求,进行什么逻辑,如果是post请求,进行什么逻辑面向对象:封装、继承、复用;Django 已写好基类,我们只需“填空”。函数视图用 if 判断方法,类视图用方法名区分方法。一个请求...
Django 类视图(Class-Based Views)速通笔记——把 GET / POST 写到一个类里,代码立刻清爽
一、为什么需要类视图
-
函数视图 if-else 堆在一起,可读性差。也就是如果是get请求,进行什么逻辑,如果是post请求,进行什么逻辑
-
面向对象:封装、继承、复用;Django 已写好基类,我们只需“填空”。
函数视图用 if 判断方法,类视图用方法名区分方法。
一个请求 URL → 视图 → 响应
所谓视图就是 Django 收到 HTTP 请求后真正干活的那一段 Python 代码。
相当于java里的后台处理逻辑
所谓类视图就是用类来写视图
二、最小可运行示例
- 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请求
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)