Python Django用户登录表单用户为无
我在登录用户时遇到一些问题。我有以下视图和模板: views.pyPython Django用户登录表单用户为无,python,html,django,forms,login,Python,Html,Django,Forms,Login,我在登录用户时遇到一些问题。我有以下视图和模板: views.py def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = auth.authenticate(username=username, password=passwo
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = auth.authenticate(username=username, password=password)
if user is not None:
if user.is_active:
auth.login(request, user)
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('disabled account')
else:
return HttpResponseRedirect('/invalid')
else:
return render(request, 'login_page.html', {})
登录页面.html
{% block content %}
{% if form.errors %}
<p class="error"> sorry, thats not a valid username or password</p>
{% endif %}
<form action="/login/" method="post">
<label for="username">User name:</label>
<input type="text" name="username" value="" id="username">
<label for="password">Password:</label>
<input type="text" name="password" value="" id="password">
<input type="submit" value="login" />
</form>
{% endblock %}
{% block content %}
{% if form.errors %}
<p class="error"> sorry, thats not a valid username or password</p>
{% endif %}
<form action="{% url 'login' %}" method="post">
{{ form }}
<input type="submit" value="login" />
</form>
{% endblock %}
更新表格:
from django import forms
from django.contrib.auth import authenticate, login, logout, get_user_model
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
def clean(self, *args, **kwargs):
username = self.cleaned_data.get("username")
password = self.cleaned_data.get("password")
if username and password:
user = authenticate(username=username, password=password)
if not user:
raise forms.ValidationError("User does not exist.")
if not user.is_active:
raise forms.ValidationError("User is no longer active.")
return super(UserLoginForm, self).clean(*args, **kwargs)
更新了login_page.html
{% block content %}
{% if form.errors %}
<p class="error"> sorry, thats not a valid username or password</p>
{% endif %}
<form action="/login/" method="post">
<label for="username">User name:</label>
<input type="text" name="username" value="" id="username">
<label for="password">Password:</label>
<input type="text" name="password" value="" id="password">
<input type="submit" value="login" />
</form>
{% endblock %}
{% block content %}
{% if form.errors %}
<p class="error"> sorry, thats not a valid username or password</p>
{% endif %}
<form action="{% url 'login' %}" method="post">
{{ form }}
<input type="submit" value="login" />
</form>
{% endblock %}
我建议您创建一个forms.py文件,并在这里创建一个如下所示的类:
from django import forms
from django.contrib.auth import authenticate, login, logout, get_user_model
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
def clean(self, *args, **kwargs):
username = self.cleaned_data.get("username")
password = self.cleaned_data.get("password")
if username and password:
user = authenticate(username=username, password=password)
if not user:
raise forms.ValidationError("User does not exist.")
if not user.is_active:
raise forms.ValidationError("User is no longer active.")
return super(UserLoginForm, self).clean(*args, **kwargs)
然后在视图中导入登录表单。创建这样的视图:
def my_login_view(request):
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return redirect('someurl')
else:
return redirect('someotherurl')
return render(request, "your_template_to_process_this_view", {'form': form})
在html模板中,您可以使用下面的约定调用表单。要使此url快捷方式正常工作,您需要在url文件顶部添加一个app_name=“yourappname”
<form method="POST" action="{% url 'yourappname:name_given_to_url_in_urls_file' %}">
{% csrf_token %}
{{ form }}
<input type="submit" class="btn-success" value="Login"/>
</form>
{%csrf_令牌%}
{{form}}
我想你的注册码可能是错的。
我们应该使用设置密码
def register(request):
if request.method == 'POST':
reg = User()
reg.username = request.POST['register_username']
reg.set_password(request.POST['register_password']) #like this line
reg.save()
not reg.password=request.POST['register\u password']用户条目确实存在,而且我正在正确地输入详细信息,这就是我遇到的问题。请尝试使用django
django.contrib.auth.forms.AuthenticationForm提供的。然后您可以得到错误描述。我得到一个名称错误“名称‘LoginForm’未定义”。您需要在视图文件中导入它:从.forms导入LoginForm,并确保在视图文件中有其他必需的导入。修复了该问题,它现在可以工作了,除了我回到了第一个问题——在表单中提交用户数据只会返回一个刷新的登录页面。它正在处理所有内容,但被不正确地重定向。在查看函数my_login(我的登录)视图中,您需要为此创建一个url,例如url(r“^login/$”,views.my_login(我的登录)视图,name='login'),其操作形式为您调用在本例中登录的url的名称。然后,您需要创建登录后需要发送给用户的页面。你可以用这个url替换“someurl”以进入帐户或主页等。顺便问一下,如果这样做有效,你可以放弃它或接受它,以便其他用户可以使用它。谢谢。我有,所以我认为这不是问题所在(url(r'^login/',views.login,name='login'))