2013-12-16 132 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')