AI智能
改变未来

Django中的CBV

  • 在django中,视图是由函数充当的,这种方式,我们称之为FBV(Function base views)
  • 而视图由类充当的,我们称之为CBV(class base views)

Django 定义视图类

  • 继承View
from django.view import Viewclass StudentView(View):def get(request, *args, **kwargs):pass# 用什么请求方式,添加什么函数
  • 在路由中定义方式
urlpatterns = [path(\'stu\', views.StudentView.as_view())# as_view()必须加上括号]

CBV通用视图

  • ListView
  • DetailView
  • CreateView
  • UpdateView
  • DeleteView

ListView

from django.views.generic import ListViewclass TestView(ListView):queryset = Student.objects.all()model = Studentordering = \"name\" # 根据哪个字段进行排序allow_empty = True # 设置查询的结果是否可以为空,默认是True,如果为False,查询不到结果时会返回404paginate_by # 用来设置每页显示的条数 如果要分页,可以通过?page的方式设置页码context_object_name =  # 向模板传递的参数template_name = # 要跳转的模板的名称

常见的底层方法
queryset = get_queryset():查询数据,支持排序,返回QuerySet,设置queryset/model,如果需要排序,可以设置ordering
context = get_context_data(object_list=queryset):支持分页效果,返回context,模板的页面的字典对象
response = render_to_response(context)

UpdateView

  • GET方法的使用
class StudentUpdateView(UpdateView):# UpdateView 在使用的时候,必须使用参数路径,必须提供一个占位符 是 pkqueryset = Student.objects.all()form_class = StudentModelForm# 会向这个页面传一个键是 form,值是form_class对应的对象# 会设置一个 object,默认也会放一个模型名,如果设置了context_object_name,则模型名对应的键会被覆盖context_object_name = \"stu\"template_name = \"stu/update.html\"

常见的底层方法
get_object() : 获取 对象 , 要求类中必须设置 queryset / model

get_context_data() : 获取向模板设置的数据, 会默认放 object (查询到的模型对象) , form (Form对象)、
必须指定 form_class , 可以指定 context_object_name 用来设置存放模型的对象, 默认名是 模型名,

render_to_response(context) : 要求设置 template_name, 默认值 <app_name>/<model_name><template_suffix>

POST 方法的使用

class StudentUpdateView(UpdateView):# UpdateView 在使用的时候,必须使用参数路径,必须提供一个占位符 是 pkmodel = Studentform_class = StudentModelFormsuccess_url = \"/user/stu/index\"

底层常见方法

get_object()

get_form()

form_valid()

form_invalid()

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Django中的CBV