2013-12-16 42 views
0

問題,我的任務....登錄基於用戶角色

我還需要使用戶的登錄基於角色(用戶類型)是「讀者」或「客戶」被重定向到正確的歡迎頁。另外,我想使用我的自定義模型(用戶的用戶名&密碼)作爲登錄憑據。我已閱讀django文檔自定義身份驗證,但我仍然不知道我會將其實施到我的項目。

models.py

class User(models.Model): 
    id = models.AutoField(primary_key=True, unique=True) 
    title = models.CharField(max_length='10') 
    surname = models.CharField(max_length='50') 
    firstname = models.CharField(max_length='50') 
    username = models.CharField(max_length='50', unique=True) 
    password = models.CharField(max_length='50') 
    email = models.EmailField(max_length='50') 
    phone = models.BigIntegerField(max_length='12') 
    city = models.CharField(max_length='50') 
    country = models.CharField(max_length='50') 
    usertype = models.CharField(max_length=13) 

views.py

def login(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response('login.html', c) 

def auth_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 

    user = auth.authenticate(username=username, password=password) 

    if user is not None: 
     auth.login(request, user) 
     return HttpResponseRedirect('adminwelcome') 
    else: 
     return HttpResponseRedirect('invalid') 

模板

{% extends "main.html" %} 
{% block title %}Log In - {{ block.super }}{% endblock %} 
{% block content %} 

    {% if form.errors %} 
     <p>Sorry, that is not a valid username or password</p> 
    {% endif %} 

    <form action = "auth_view" method="post"> {% csrf_token %} 
     <label for="username">Username:</label> 
     <input type="text" name="username" value="" id="username" /> 
     <br /> 
     <label for="password">Password:</label> 
     <input type="password" name="password" value="" id="password" /> 
     <br /> 
     <input type="submit" value="Login" /> 
    </form> 
    <p>Not Registered? <a href="register">Create Account </a></p> 
{% endblock %} 
+0

請拆分這兩個問題分成不同的崗位.. – mariodev

+0

好吧,我會...謝謝 – thurpe

回答

0

我所做的是正在被拯救了我的用戶模型形式的時候,它應該得到的用戶名,密碼和電子郵件,並使用這一行代碼在Django auth用戶表中創建一個用戶

User.objects._create_user(request.POST['username'], request.POST['email'], request.POST['password'],False,False) 

這是views.py

def register(request): 
    if request.method == 'POST': 
     form = RegisterForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      User.objects._create_user(request.POST['username'], request.POST['email'], request.POST['password'],False,False) 
      # Redirect to the document list after POST 
      return HttpResponseRedirect('register_success') 
    else: 
     form = RegisterForm() 

    args = {} 
    args.update(csrf(request)) 
    args['forms'] = RegisterForm() 
    return render_to_response('register.html', args) 

然後基於角色登錄的全部代碼,我不得不通過設置'is_staff' = true,使用戶從管理端的工作人員。之後,我所要做的就是在登錄驗證期間通過auth_view請求中的'is_staff==True'。有點骯髒,但它伎倆。任何進一步優化表示讚賞。乾杯。

Views.py

def auth_view(request): 
    username1 = request.POST.get('username', '') 
    password1 = request.POST.get('password', '') 

    user = auth.authenticate(username=username1, password=password1) 

    #check if user has been set to staff (reader), redirect to reader welcome 
    if user is not None and user.is_staff==True: 
     auth.login(request, user) 
     return HttpResponseRedirect('readerwelcome') 

    #check if user is not staff(client), redirect to client welcome 
    elif user is not None: 
     auth.login(request, user) 
     return HttpResponseRedirect('clientwelcome') 

    #if login details not found, return error page 
    else: 
     return HttpResponseRedirect('invalid')