Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-view accounts.decorators.wrapper_函数没有';t返回HttpResponse对象。它没有返回任何结果_Django_Django Models_Django Views_Python Decorators - Fatal编程技术网

Django-view accounts.decorators.wrapper_函数没有';t返回HttpResponse对象。它没有返回任何结果

Django-view accounts.decorators.wrapper_函数没有';t返回HttpResponse对象。它没有返回任何结果,django,django-models,django-views,python-decorators,Django,Django Models,Django Views,Python Decorators,我正在构建一个客户管理应用程序,并且已经构建了几个装饰程序。但当我运行应用程序时,会出现此错误 view accounts.decorators.wrapper_函数未返回HttpResponse对象。相反,它没有返回任何结果。 装饰师 from django.http import HttpResponse from django.shortcuts import redirect def unauthenticated_user(view_func): def wrapper_f

我正在构建一个客户管理应用程序,并且已经构建了几个装饰程序。但当我运行应用程序时,会出现此错误

view accounts.decorators.wrapper_函数未返回HttpResponse对象。相反,它没有返回任何结果。

装饰师

from django.http import HttpResponse
from django.shortcuts import redirect


def unauthenticated_user(view_func):
    def wrapper_func(request, *args, **kwargs):
        if request.user.is_authenticated:
            return redirect('home')
        elif request.user.is_authenticated == None:
            return redirect('login')
        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')
        return wrapper_func
    return decorator


def admin_only(view_func):
    def wrapper_function(request, *args, **kwargs):
        group = None
        if request.user.groups.exists():
            group = request.user.groups.all()[0].name

        if group == 'customer':
            return redirect('user-page')

        if group == 'admin':
            return view_func(request, *args, **kwargs)

    return wrapper_function

还有我的观点

from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.forms import inlineformset_factory
from django.contrib.auth.forms import UserCreationForm

from django.contrib.auth import authenticate, login, logout

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group

from .models import *
from .forms import OrderForm, CreateUserForm, CustomerForm
from .filters import OrderFilter
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')


            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 or incorrect')
    context = {}
    return render(request,'accounts/login.html',context)


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

@admin_only
@login_required(login_url='login')
def home(request):
    orders = Order.objects.all()
    customers = Customer.objects.all()

    total_customer = customers.count()
    total_orders = orders.count()
    delivered = orders.filter(status='Delivered').count()
    pending  = orders.filter(status='Pending').count()


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

@login_required(login_url='login')
@allowed_users(allowed_roles=['customer'])
def userPage(request):
    orders = request.user.customer.order_set.all()

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

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

@login_required(login_url='login')
@allowed_users(allowed_roles=['customer'])
def accountSettings(request):
    customer = request.user.customer
    form = CustomerForm(instance=customer)

    if request.method == 'POST':
        form = CustomerForm(request.POST, request.FILES,instance=customer)
        if form.is_valid():
            form.save()


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

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

@login_required(login_url='login')
@allowed_users(allowed_roles=['admin'])
def customer(request,pk_test):
    customer = Customer.objects.get(id=pk_test)

    orders = customer.order_set.all()
    order_count = orders.count()
    myFilter = OrderFilter(request.GET, queryset=orders)
    orders = myFilter.qs
    context = {'customer':customer,'orders':orders,'order_count':order_count,'myFilter':myFilter}

    return render(request, 'accounts/customer.html',context)

@login_required(login_url='login')
@allowed_users(allowed_roles=['admin'])
def createOrder(request,pk):
    OrderFormSet = inlineformset_factory(Customer,Order, fields=('product', 'status'),extra=10)
    customer = Customer.objects.get(id=pk)
    #form = OrderForm(initial={'customer':customer})
    formset = OrderFormSet(queryset=Order.objects.none(),instance=customer)
    if request.method == 'POST':
        #print('Printing POST',request.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')
@allowed_users(allowed_roles=['admin'])
def updateOrder(request,pk):
    order = Order.objects.get(id=pk)
    form = OrderForm(instance=order)
    context = {'form':form}
    if request.method == 'POST':
        #print('Printing POST',request.POST)
        form = OrderForm(request.POST,instance=order)
        if form.is_valid():
            form.save()
            return redirect('/')
    return render(request,'accounts/order_form.html',context)


@login_required(login_url='login')
@allowed_users(allowed_roles=['admin'])
def deleteOrder(request,pk):
    order = Order.objects.get(id=pk)
    if request.method == 'POST':
        order.delete()
        return redirect('/')
    context={'item':order}
    return render(request, 'accounts/delete.html',context)


这是我的第一个问题请告诉我,如果我没有提供任何有用的信息来回答这个问题

正如Lain Shelvington在评论中提到的那样,您的
管理员
装饰师不会对“管理员”和“客户”以外的组返回响应:

def admin_only(查看函数):
def包装器_函数(请求、*args、**kwargs):
组=无
如果request.user.groups.exists():
group=request.user.groups.all()[0]。name
如果组==“客户”:
返回重定向('用户页')
elif组==“管理员”:
返回视图功能(请求,*args,**kwargs)
其他:
返回#Shiv

如果您正在学习Dennis Ivy的教程,但仍然存在该问题,请尝试以下方法:

  • 使用超级用户帐户登录到Django管理站点
  • 返回主站点
  • 注销并尝试创建另一个用户

  • 我在处理信号视频时也犯了同样的错误。我不确定是否还有另一个bug需要修复,但这让应用程序再次为我工作。

    问题是您登录的帐户不属于任何组。我假设这是您第一次创建的管理员帐户。转到管理页面-->然后转到用户-->并将管理组分配给他。但是一个更好的答案被放弃了,因为它确实提供了一个解决方案

    我假设你正在关注Dennis Ivy在youtube上的教程

    我也有同样的问题。对我来说,这是因为当我第一次将数据库从sqlite迁移到PostgreSQL,然后从PostgreSQL迁移到AWS RDS时,不知何故,我所有的用户信息都丢失了

    我的解决方法是创建一个新的超级用户(因为我的超级用户被删除了),其中包括:
    python manage.py createsuperuser
    然后使用此新的超级用户登录信息登录到管理面板。您将看到您的超级用户尚未分配给任何组,如果您检查您的组面板,您将看到前面创建的组变量,即
    customer
    admin
    ,不在这里。因此,继续创建这两种组类型。然后返回用户面板,为超级用户分配admin变量

    然后注销并转到您的
    /register/
    页面,创建一个普通帐户(不是管理员,只是客户)。然后,如果您登录到超级用户帐户并再次转到管理面板,您将看到您的普通用户(客户)被分配了
    customer
    变量


    这就是我解决问题的方法。我希望这对你的工作有帮助。干杯。

    我也犯了同样的错误,我是如何解决的?实际上这是一个愚蠢的错误。 首先。 转到“管理员”,转到“用户”而不是“组”部分,您将看到您尚未将任何组分配给该客户。根据您的选择分配客户组或管理员组


    这是我的错误,我没有分配任何小组。我希望你也犯了同样的错误。

    对于一些会出现此错误的人,用户“sogu”的响应修复了我的问题:
    (如果其他解决方案对您不起作用,请查看该解决方案)

    只有在不满足条件时,admin_中的包装函数才会返回响应。你需要归还一些东西谢谢!这很有帮助。哈伊尔·丹尼斯·艾薇:)也有同样的错误。谢谢你的详细说明。嗨,丹尼斯·艾薇:)
    def admin_only(view_func):
        def wrapper_function(request, *args, **kwargs):
            group = None
            if request.user.groups.exists():
                group = request.user.groups.all()[0].name
    
            if group == 'customer':
                return redirect('user-page')
            elif group == 'admin':
                return view_func(request, *args, **kwargs)
            else:
                return # <- return response here (possibly a redirect to login page?)
    
        return wrapper_function