簡體   English   中英

Django自定義登錄頁面

[英]Django custom login page

我有一個自定義的Django登錄頁面。 我想在用戶名或密碼字段為空時引發異常。 我怎樣才能做到這一點?

我的view.py登錄方法:

def user_login(request):
    context = RequestContext(request)
    if request.method == 'POST':
        # Gather the username and password provided by the user.
        # This information is obtained from the login form.
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        print("auth",str(authenticate(username=username, password=password)))

        if user:
            # Is the account active? It could have been disabled.
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect('/')
        else:
            return HttpResponse("xxx.")
    else:
        # Bad login details were provided. So we can't log the user in.
        print ("Invalid login details: {0}, {1}".format(username, password))
        return HttpResponse("Invalid login details supplied.")
    else:
        return render_to_response('user/profile.html', {}, context)

我嘗試了一下,但沒有成功:這是forms.py

def clean_username(self):
    username = self.cleaned_data.get('username')
    if not username:
        raise forms.ValidationError('username does not exist.')

您可以使用Django提供的登錄視圖。 因此,您的login.html應該類似於該示例。

<form class="login" method="POST" action="/login/">

  {% csrf_token %}

  {{form.as_p}}

  <li><input type="submit" class="logBut" value="Log in"/></li>
  </form>

並記住urls.py!

url(r'^login/$','django.contrib.auth.views.login', {'template_name': '/login.html'}),

正確的方法是使用表單 ,而不是直接從request.POST獲取變量。 然后,Django將驗證表單數據,並在模板中呈現表單時顯示錯誤。 如果需要一個表單字段,那么當該字段為空時,Django將自動顯示錯誤,您甚至不需要為此編寫clean_<field_name>方法。

Django已經有一個內置的登錄視圖 最簡單的方法是使用它而不是自己編寫。 如果您仍然想編寫自己的視圖,那么查看Django的工作方式仍然很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM