我正在 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)