0

所以我仍然是 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中有更好的方法吗?使用一些内置功能?

谢谢您的帮助

4

1 回答 1

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

此外,您可以编写自定义中间件,并在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.

于 2012-10-27T19:30:37.157 回答