装饰器在 Django 中返回 None 的原因是什么?

时间:2021-03-27 04:36:53

标签: python django syntax-error python-decorators valueerror

我正在 Django 中执行一个客户关系项目,它返回此 ValueError at /login/ 错误。我可以登录管理面板,当我注销时会出现此错误。

<块引用>

*ValueError at /login/

视图 accounts.decorators.wrapper_func 未返回 HttpResponse 对象。相反,它返回了 None

decorators.py:

from django.http import HttpResponse
from django.shortcuts import redirect,render
def unauthenticated_user(view_func):
    def wrapper_func(request, *args, **kwargs):
        if request.user.is_authenticated:
            return redirect('home')
        else:
            return view_func(request, *args, **kwargs)

    return wrapper_func


def allowed_users(allowed_roles=[]):
    def decorator(view_func):
        def wrapper_func(request, *args, **kwargs):

            group = None
            if request.user.groups.exists():
                group = request.user.groups.all()[0].name

            if group in allowed_roles:
                return view_func(request, *args, **kwargs)
            else:
                return HttpResponse('You are not authorized to view this page')

views.py:

from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.forms import inlineformset_factory
from accounts.models import *
from .forms import orderForm,createUserForm
from .filters import orderFilter
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group
from .decorators import unauthenticated_user,allowed_users,admin_only
# Create your views here.

@unauthenticated_user
def registerPage(request):
    
    form = createUserForm()
    if request.method == 'POST':
        form = createUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')

            group = Group.objects.get(name='customer')
            user.groups.add(group)
            messages.success(request, 'Account was created for ' + username)
            return redirect('login')


    context = {'form':form}
    return render(request, 'accounts/register.html', context)

@unauthenticated_user
def loginPage(request):
    
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            messages.info(request, 'Username or Password is incorrect')
        context = {}
        return render(request, 'accounts/login.html', context)


def logoutUser(request):
    logout(request)
    return redirect('login')

@login_required(login_url='login')
@allowed_users(allowed_roles=['admin'])
    def home(request):
    customer = Customer.objects.all()
    orders = Orders.objects.all()

    total_customers =  customer.count()
    total_orders =  orders.count()
    delivered = orders.filter(status='Delivered').count()
    pending = orders.filter(status='Pending').count()

    context = {'customer':customer, 'orders':orders, 'total_orders':total_orders, 'delivered':delivered, 'pending':pending}
    return render(request,'accounts/home.html', context)

def userPage(request):
    context = {}
    return render(request, 'accounts/user.html', context)


@login_required(login_url='login')
def products(request):
    product = Product.objects.all()
    
    return render(request, 'accounts/product.html',{'products':product})

@login_required(login_url='login')
def customer(request, pk):
    customer = Customer.objects.get(id=pk)
    orders = customer.orders_set.all()
    count = orders.count()


    myFilter = orderFilter(request.GET, queryset=orders)
    orders = myFilter.qs

    context = {'customer':customer, 'orders':orders, 'count':count, 'myFilter':myFilter}
    return render(request, 'accounts/customer.html', context)

@login_required(login_url='login')
def createOrder(request):
    orderFormSet = inlineformset_factory(Customer, Orders, fields=('product','status'), extra=5)
    #customer = Customer.objects.get(id=pk)
    formset = orderFormSet(queryset=Orders.objects.none()) #instance=customer
    #form = orderForm(initial={'customer':customer})
    if request.method == 'POST':
        #form = orderForm(request.POST)
        formset = orderFormSet(request.POST) #instance=customer
        if formset.is_valid():
            formset.save()
            return redirect('/')



    context = {'formset':formset}
    return render(request, 'accounts/order_form.html', context)


@login_required(login_url='login')
def updateOrder(request,pk):
    order = Orders.objects.get(id=pk)
    form = orderForm(instance=order)
    if request.method == 'POST':
        form = orderForm(request.POST, instance=order)
        if form.is_valid():
            form.save()
            return redirect('/')


    context = {'form':form}
    return render(request, 'accounts/order_form.html', context)

@login_required(login_url='login')
def deleteOrder(request, pk):
    order = Orders.objects.get(id=pk)
    if request.method == 'POST':
        order.delete()
        return redirect('/')

    context = {'order':order}
    return render(request, 'accounts/delete.html', context)

0 个答案:

没有答案