所以我仍然是Django的新手,我想就此提出建议:
我的应用程序中有一个用户系统,它来自userena:
class FindUrGeekUserProfile(UserenaBaseProfile):
user = models.OneToOneField( User, unique = True, verbose_name ='userData', related_name='myProfile',db_index = True)
type = models.CharField(max_length = 2, choices = USER_TYPE, blank = True, null = True, db_index = True)
def __unicode__(self):
return 'Name: ' + self.user.username + ' Type: ' + self.type
当用户在我的网站上注册时,他会完成登录,密码和电子邮件字段。
用户第一次通过我的网站连接时,他会看到一个页面询问他的用法类型:Type1或Type2 ......
我想在每个login_registered视图中验证用户是否已定义其类型。到目前为止,我创建了一个我在每个注册视图中使用的函数:
def checkUserType(user):
if(user.type != None)
return True
else:
retur False
@login_registered
def myView(request):
if (checkUserType(request.user)):
Continue....
else:
return redirect('setUserType') # Page where the user will set his type
Django有更好的方法吗?使用一些内置功能?
谢谢你的帮助
答案 0 :(得分:0)
至少有一种更好的方式:
@login_registered
def myView(request):
if not checkUserType(request.user):
return redirect('setUserType') # Page where the user will set his type
# user has the type, continue
此外,您可以write a custom middleware,并在process_request()
中执行检查/重定向。它可能看起来像:
from django import http
from django.core.urlresolvers import reverse
class SetUserTypeMiddleware(object):
urls = ['/some/path/that/requires/user/type/',]
def process_request(self, request):
if not request.user.is_authenticated():
return
for url in urls: # customize url matching to your taste
if url in request.path_info:
return http.HttpResponseRedirect(reverse('setUserType'))
中间件是一个很酷的功能,它简单而强大。只是不要忘记在settings.MIDDLEWARE_CLASSES
注册它们。