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

ユーザーが私のWebサイトに登録すると、ログイン、パスワード、および電子メールのフィールドに入力します。

ユーザーが私のWebサイトを介して初めて接続すると、ユーザータイプ(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 に答える