2014-02-08 2 views
0

이것은 이전 질문의 확장입니다. is_superuseris_staff으로 인증을 받았습니다. 이제 스탭이 로그인하여 수퍼 유저 만 볼 수있는 것을보고 싶다면 다른 페이지로 리디렉션해야합니다. 직원을 다른 페이지로 리디렉션하도록 @user_passes_test(lambda u: u.is_superuser)을 수정합니까? 그렇다면, 어떻게해야합니까? 워드 프로세서에서@user_passes_test (lambda : u.is_superuser)를 수퍼 유저가 아닌 다른 페이지로 리디렉션

from django import forms 
from django.conf import settings 
from django.http import HttpResponse, HttpResponseRedirect, Http404 
from ManagerApp import models as pmod 
from . import templater 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.decorators import user_passes_test 

@login_required(login_url='/ManagerApp/login/') 
@user_passes_test(lambda u: u.is_superuser) 

def process_request__new(request): 
    q = pmod.User() 
    q.first_name = 'New User!' 
    q.save() 
    return HttpResponseRedirect('/ManagerApp/edit_user/' + str(q.id)) 

@user_passes_test(lambda u: u.is_superuser) 

def process_request(request): 
    '''Shows all users in the DB''' 
    q = pmod.User.objects.get(id=request.urlparams[0]) 
    form = UserForm(initial={ 
    #'active': q.is_active, 
    'superuser': q.is_superuser, 
    'staff': q.is_staff, 
    'firstname': q.first_name, 
    'lastname': q.last_name, 
    'username': q.username, 
    'password': q.password, 
    'email': q.email, 
    'street': q.street, 
    'city': q.city, 
    'state': q.state, 
    'zipCode': q.zipcode, 
    'phone': q.phone, 
    }) 
    if request.method == 'POST': 
    form = UserForm(request.POST) 
    if form.is_valid(): 
     #q.is_active = form.cleaned_data['active'] 
     q.is_superuser = form.cleaned_data['superuser'] 
     q.is_staff = form.cleaned_data['staff'] 
     q.first_name = form.cleaned_data['firstname'] 
     q.last_name = form.cleaned_data['lastname'] 
     q.username = form.cleaned_data['username'] 
     q.set_password(form.cleaned_data['password']) 
     q.email = form.cleaned_data['email'] 
     q.street = form.cleaned_data['street'] 
     q.city = form.cleaned_data['city'] 
     q.state = form.cleaned_data['state'] 
     q.zipcode = form.cleaned_data['zipcode'] 
     q.phone = form.cleaned_data['phone'] 
     q.save() 
     return HttpResponseRedirect('/ManagerApp/users/') 

    # return the template html 
    template_vars = { 
    'form': form, 
    } 
    return templater.render_to_response(request, 'edit_user.html', template_vars) 

class UserForm(forms.Form): 
    '''The question form''' 
    #active = forms.NullBooleanField(required=False) 
    superuser = forms.NullBooleanField(required=False) 
    staff = forms.NullBooleanField(required=False) 
    firstname = forms.CharField(required=False) 
    lastname = forms.CharField(required=False) 
    username = forms.CharField(required=False) 
    password = forms.CharField(required=False) 
    email = forms.CharField(required=False) 
    street = forms.CharField(required=False) 
    city = forms.CharField(required=False) 
    state = forms.CharField(required=False) 
    zipcode = forms.CharField(required=False) 
    phone = forms.CharField(required= 

거짓) 직접

답변

0

:

user_passes_test()은 로그인 페이지의 URL 기본적으로 (settings.LOGIN_URL)를 지정할 수 있습니다 옵션 login_url 인수를 취합니다.

물론 로그인 페이지로 보낼 필요는 없습니다. 예 :

@user_passes_test(lambda u: u.is_superuser, login_url='/get-outta-here/') 
def my_view(request): 
    ... 

내가 여기 아래에 쓸 것이다하는 질문과 관련된 직접 노출시 키지하지만, 더 조언을위한 것입니다.

장고의 ModelFormsclass-based generic views을 살펴 봐야한다고 생각합니다. 결국 코드를 ​​적게 작성할 수 있습니다. 그것의 모양으로 당신은 단순히 당신의보기의 대부분을 작성할 수

from django.forms import ModelForm 
from django.views.generic import UpdateView 

class UserForm(ModelForm): 
    class Meta: 
     model = User 
     fields = ['list', 'of', 'all', 'your', 'field', 'names'] 

class UserUpdate(UpdateView): 
    model = User 
    form_class = UserForm 

(물론, 당신은 decorating class-based views 조사해야 ...)

관련 문제