zoukankan      html  css  js  c++  java
  • django视图函数中 应用装饰器

    from django.shortcuts import render, redirect, HttpResponse
    from .forms import LoginForm, RegistrationForm
    from django.contrib.auth import authenticate, login, logout
    from django.contrib.auth.models import User
    from django import forms
    from .models import UserInfo
    
    
    # 不带参数的装饰器
    def outer(func):
        def inner(request, *args, **kwargs):
            if request.user.is_authenticated:
                return func(request, *args, **kwargs)
            else:
                return redirect('/account/login/')
        return inner
    
    
    # 单参数的装饰器
    def outer_args(arg):
        def outers(func):
            def inner(request, *args, **kwargs):
                if request.user.is_authenticated:
                    return func(request, *args, **kwargs)
                else:
                    print(arg)
                    return redirect(arg)
            return inner
        return outers
    
    
    def user_login(request):
        if request.method == 'GET':
            form_obj = LoginForm()
            return render(request, 'account/login.html', {'form': form_obj})
    
        if request.method == 'POST':
            form_obj = LoginForm(request.POST)
            if form_obj.is_valid():
                user = authenticate(username=form_obj.cleaned_data['username'], password=form_obj.cleaned_data['password'])
                if user:
                    login(request, user)
                    return redirect('/')
                else:
                    return HttpResponse('username or password is not right !')
            else:
    
                return render(request, 'account/login.html', {'form': form_obj})
    
    
    def user_logout(request):
        logout(request)
        return redirect('/')
    
    
    def register(request):
        if request.method == 'GET':
            register_form = RegistrationForm()
            return render(request, 'account/register.html', {'form':register_form, 'user': None})
    
        if request.method == 'POST':
            register_form = RegistrationForm(request.POST)
            if register_form.is_valid():
                new_user = register_form.save(commit=False)
                new_user.set_password(register_form.cleaned_data['password'])
                new_user.save()
                return redirect('/')
            else:
                return render(request, 'account/register.html', {'form': register_form, 'user': None})
    
    
    @outer_args('/account/login/')
    def personal_data(request):
        return HttpResponse('OK')
    

      

  • 相关阅读:
    vue封装一些常用组件loading、switch、progress
    个人推荐的两款vue导出EXCEL插件
    解决react项目中跨域和axios封装使用
    vue仿阿里云后台管理(附加阿里巴巴图标使用)
    简单的利用nginx部署前端项目
    Python3 SMTP发送邮件
    WINDOWS和UNIX换行符的理解
    Forward Proxy vs Reverse Proxy
    Authentication token is no longer valid
    SNMP Introduction
  • 原文地址:https://www.cnblogs.com/liyqiang/p/8744581.html
Copyright © 2011-2022 走看看