繁体   English   中英

Django连接表单可以连接任何用户名或密码

[英]Django connection form connect whatever the username or the password

我是Django的新手,我尝试构建一个连接表单。 表单已创建,视图也可以继续执行。 但是,无论用户名和密码如何,该表单都会重定向我,就像我已连接一样。

urls.py

from django.conf.urls import patterns, url, include

urlpatterns = patterns ('pmd.views',
url(r'^connexion$', 'connexion', name="se_connecter"),
url(r'^home$', 'p_home', name="home"),)

表格

"""Formulaire de connexion"""
class ConnexionForm(forms.Form):
    username = forms.CharField(label="Nom d'utilisateur", max_length=30)
    password = forms.CharField(label="Mot de passe", widget=forms.PasswordInput)

views.py

"""Vue utilisée pour se connecter"""
def connexion(request):
    connexionForm = ConnexionForm()
    if request.method == "POST":
        connexionForm = ConnexionForm(request.POST)
        if connexionForm.is_valid():
            u = connexionForm.cleaned_data["username"]
            p = connexionForm.cleaned_data["password"]
            user = authenticate(username=u, password=p)
            if user is not None and user.is_valid:
                login(request, user)
                reverse_lazy(home)
    else:
        connexionForm = ConnexionForm()
    return render(request, 'pmd/connexion.html', locals())

def p_home(request):
    return render(request, 'pmd/home.html', locals())

connexion.html

{% extends "pmd/base.html" %}
{# Ce commentaire Django ne sera pas visible dans le code source. #}
{% block title %}Connexion{% endblock %}
{% block content %}
<h1>Se connecter</h1>
    <form action="." method="post">
        {% csrf_token %}
        {{ connexionForm.as_p }}
        <input type="submit" value="Se connecter"/>
    </form>
{% endblock %}

如果我对您的理解正确,则您正在尝试对用户进行身份验证,如果该用户存在,则要重定向到主目录,否则要返回显示适当错误的表单。 您需要在代码中进行一些更正。

尝试这个

表格

def clean(self):
    self.user_cache = None
    cd = self.cleaned_data
    username = cd.get('username')
    password = cd.get('password')
    if username and password:

        self.user_cache = authenticate(username=username, password=password)
        if self.user_cache is None:
            raise forms.ValidationError(u"Wrong Username and Password Combination.")
        elif self.user_cache is not None and self.user_cache.is_active is False:
            raise forms.ValidationError(u'Sorry, Your Account is not Activated yet.')
    return cd

def get_user(self):
    return self.user_cache

views.py

from django.shortcuts import render, redirect
from django.template import RequestContext

def connexion(request):
  connexionForm = ConnexionForm()
  if request.method == "POST":
     connexionForm = ConnexionForm(request.POST)
     if connexionForm.is_valid():
         login(request, connexionForm.get_user())
         redirect('home')
   context={'connexionForm': connexionForm}
return render(request, 'pmd/connexion.html', context, context_instance=RequestContext(request))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM