Django_CBV

面向对象基础

class Dog:
    name = '狗子'

    def run(self):
        print('滚滚')


def go():
    print('....')


dog = Dog()
print(getattr(dog, 'name'))
function = getattr(dog, 'run')
function()
function1 = getattr(dog, 'run1', go)
function1()

CBV

# CBV Class Based View 基于类的视图
# 优点:有继承,代码可复用、可维护性更强; 一个请求对应一个方法,无需判断(判断隐藏了)
# 缺点:比较抽象,不易懂
class RegisterView(View):
    # @classmethod
    # def as_view(cls, **initkwargs):
    #     return super().as_view(**initkwargs)
    a = 90

    def get(self, request):
        print(self.a)
        return HttpResponse("GET")

    def post(self, request):
        return HttpResponse("POST")

    def put(self, request):
        return HttpResponse("PUT")

    def delete(self, request):
        return HttpResponse("DELETE")


class ZTemplateView(TemplateView):
    # 模板文件名
    template_name = 'example.html'

    # 获取模板中数据
    def get_context_data(self, **kwargs):
        kwargs = super().get_context_data(**kwargs)
        kwargs['name'] = '弟弟'
        kwargs['title'] = '臭'
        return kwargs


class ZListView(ListView):
    # 模板文件名
    template_name = 'list.html'
    paginate_by = 5  # 每页记录个数
    ordering = ('username',)  # 根据字段名排序(不能影响重写的字段)

    # 查询结果集
    # queryset = User.objects.all()

    # 复杂查询,重写方法
    def get_queryset(self):
        dates = User.objects.filter(uid__gt=100)

        return dates


class ZDetail(DetailView):
    template_name = 'detail.html'
    queryset = User.objects.all()
    context_object_name = 'user'  # 修改名称


class ZCreateView(CreateView):
    # template_name = 'create.html'
    # model = User
    # # 字段列表,用于创建用户时设置用户属性
    # fields = ['username', 'password']
    # success_url = '/'  # 创建成功后跳转的页面

    def get(self, request, *args, **kwargs):
        return render(request, 'list.html')

    def post(self, request, *args, **kwargs):
        dates = request.POST.dict()
        dates.pop('csadoiansfoinurnorvbon')
        User.objects.create(**dates)
        return redirect('/')


# 路由保护装饰器
def check_login(func):
    def inner(request, *args, **kwargs):
        if request.session.get('username'):
            return func(request, *args, **kwargs)
        return redirect('/')

    return inner


@method_decorator(check_login, name='dispatch')  # 对所有请求方法起作用
class ZPublishView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('文章展示')

    def post(self, request, *args, **kwargs):
        return HttpResponse('发表文章')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值