django视图函数中 应用装饰器

Django用户认证实践
本文介绍了一个使用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')

  

转载于:https://www.cnblogs.com/liyqiang/p/8744581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值