【发布时间】:2014-08-10 18:44:30
【问题描述】:
我正在尝试制作一个包含三种用户["client" , "volunteer" , "coordinator"] 的小型网站。每种类型的用户对其可以访问的视图都有限制。所有三个用户都有不同的登录页面。
方法 1: 为了实现这一点,我向会话 category 添加了一个密钥,在登录期间分配上述给定的用户类型之一,并且每当调用视图时,检查是否用户可以访问该视图。
login.html:
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<p class="error"> Sorry , invalid</p>
{% endif %}
<form action="/login_volunteer/authenticate/" method="post">{% csrf_token %}
<label for="username"> Username : </label>
<input type="text" name="username" value="" id="username">
<label for="password"> Password : </label>
<input type="password" name="password" value="" id="password">
<input type="hidden" name="category" value="volunteer" id="category">
<input type="submit" value="login" />
</form>
{% endblock %}
view.py:
def hello(request):
name = "abhishek"
if request.session.session_key is None:
html = '<html><body>Session is expired</body></html>'
return HttpResponse(html)
try:
if not request.POST.get('category') == 'volunteer
html = '<html><body>You are Not allowed here</body></html>'
return HttpResponse(html)
except :
print "error"
html = '<html><body>Hi this is awesome</body></html>'
return HttpResponse(html)
方法 2: 我想我可以创建一个自定义 User 类,而不仅仅是使用 Django 提供的默认 User 并在登录期间将 CustomUser 分配给 request.user。然后当视图被调用时,我检查 is_Client 或 is_Volunteer。
customUser.py:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
class VolunteerUser(AbstractBaseUser):
"""
Custom user class.
"""
email = models.EmailField('email address', unique=True, db_index=True)
joined = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
is_volunteer = models.BooleanField(default=False)
class ClientUser(AbstractBaseUser):
"""
Custom user class.
"""
email = models.EmailField('email address', unique=True, db_index=True)
joined = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
is_Client = models.BooleanField(default=False)
所以我的问题是,这些方法中哪一种是完成手头任务的最佳方式?有没有其他方法可以解决这个问题?
我也担心安全问题,感觉第一种方法比第二种更不安全。
【问题讨论】:
-
就个人而言,我更喜欢使用 Django 内置的
Group模型。 docs.djangoproject.com/en/dev/ref/contrib/auth/…
标签: python django python-2.7 django-sessions