2011-05-25 8 views
0

最初に私の英語のための私を言い訳それは最高のものではありません。Djangoクラスの問題

私はかなりdjangoとpythonに慣れています。私はプログラマーにユーザーの認証を試みます。 私は、Djangoのドキュメントを使用し、すべてのものは、以下のこれらのコードで正常に動作します:

def anges(request): 

     username = [] 
     password = [] 

     if request.method == "POST": 
       username = request.POST['username'] 
       password = request.POST['password'] 
       user = authenticate(username=username, password=password) 
       render_to_response ('registration/login.html', {'username': username, 'password': password}) 

       if user is not None: 
         if user.is_active: 
           login(request, user) 
           angestellte_list = Employee.objects.all().order_by('lastname') 
           return render_to_response(("emp/angestellte.html"), {'angestellte_list': angestellte_list}) 
         else: 
           return HttpResponse('disabled account') 
       else: 
         return HttpResponse('invalid login') 
     else: 
       return render_to_response ('registration/login.html', {'username':username, 'password':password}) 

しかし、これはただの関数であり、私が原因DRYの、私のviews.pyに私の他の機能のために指向のこのオブジェクトを使用します。 これは単に最初のテストですが、デバッガが言うので、それはない作品のことを行います。どのように私はクラスでリクエスト変数を使用することができます

class einloggen: 

     def __init__(self): 
       self.Username = request.POST['username'] 

     def angestellte(self): 
       return HttpResponse("hello") 

か:私のコードです の「グローバル名 『要求』が定義されていません」考慮すべきことは何ですか?

+1

Djangoにはすでに完全なユーザー認証アプリケーションがあります。なぜあなた自身で書くのですか? –

+0

...言い換えれば、 'django.contrib.auth'に必要なものは何ですか? –

答えて

2

クラスの__init__変数にrequest変数を使用することはできません。まさに率直なことに、要求変数をコンストラクタに送信しないためです。

私はあなたがいずれかのどこでも、あなたのビューでeinloggenオブジェクトを作る見ることはできませんが、あなたはおそらくのようなものにすべきである:

あなたのビューで
class einloggen: 
    def __init__(self, request): 
     self.Username = request.POST.get('username') 

、その後、(あなたがリクエスト変数を持っている場合) :

def anges(request): 
    myobj = einloggen(request) 

はしかし、Djangoはすでに認証システムを持っています。そして、それを使うほうがはるかに良いでしょう。美しいデコレータを使用すると、ビューを「保護する」ことがとても簡単で素敵です。