Django 注册和认证
Django Registration and Authenticate
我想在一个页面上进行注册和认证。
如果在第一个表单(form1 - authenticate)中输入正确的数据,那么什么都不会发生。
如果在第二个表格(表格 2 - 注册)中输入数据,也不会发生任何事情。但我不明白为什么 ??!!
这是我的第一个项目,所以...
如果你能帮助我,我会非常非常非常高兴!!!
views.py
class RegisterFormView(FormView):
form_class = UserCreationForm
def form_valid(self, form):
form.save()
return super(RegisterFormView, self).form_valid(form)
def get_success_url(self):
return resolve_url('core:mainPage')
def myview(request):
form1 = UserForm(request.POST or None)
form2 = UserCreationForm(request.POST or None)
context = {'form1': form1, 'form2': form2,}
if request.method == 'POST' and form1.is_valid():
user = authenticate(username=form1.cleaned_data['user'], password=form1.cleaned_data['password'])
if user is not None:
if user.is_active:
login(request, user)
render(request, 'core/main_page.html')
else:
return render(request, 'core/main_page.html')
else:
return render(request, 'core/main_page.html')
if request.method == 'POST' and form2.is_valid():
RegisterFormView.form_valid(request, form2)
return render(request, 'core/login.html', context)
login.html
{% extends "core/base.html" %}
{% load widget_tweaks %}
{% block title %} {% endblock %}
{% block content %}
<div class="container header clearfix">
<h3> Авторизация </h3>
<form method="post" class="form-horizontal">
{% csrf_token %}
{% render_field form1.user class="form-control" placeholder="Логин"%}
{% render_field form1.password class="form-control" placeholder="Пароль"%}
{{ form.errors }}
<input type="submit" class="btn btn-default" id="norm">
</form>
<h3>Регистрация</h3>
<form method="post" class="form-horizontal" role="form">
{% csrf_token %}
{% render_field form2.first_name class="form-control" placeholder="Ваше имя"%}
{% render_field form2.last_name class="form-control" placeholder="Ваша фамилия"%}
{% render_field form2.username class="form-control" placeholder="Логин"%}
{% render_field form2.password1 class="form-control" placeholder="Пароль"%}
{% render_field form2.password2 class="form-control" placeholder="Повторите пароль"%}
{% render_field form2.email class="form-control" placeholder="email"%}
{% render_field form2.email class="form-control" placeholder="Повтотрите email"%}
<input type="submit" class="btn btn-default" >
</form>
{% endblock %}
网址
from django.conf.urls import url, include
from django.contrib.auth.views import login, logout
from . import views
urlpatterns = [
url(r'^$', views.MainPage.as_view(), name="mainPage"),
url(r'^support/', views.HowToPrint.as_view(), name="support"),
url(r'^login/', views.myview, name="login"),
url(r'^logout/', logout, name="logout"),
url(r'^thank-you', views.Thanks.as_view(), name="thank-you")
]
您似乎忘记为 post 到 (http://www.w3schools.com/tags/tag_form.asp)
的表格放置位置
如果您阅读上面的 link,您会发现表格看起来像这样...
<form action="demo_form.asp" method="get">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="Submit">
</form>
demo_form.asp
指表单发送到的路径。在您的模板中,您需要添加一个将其发送到您的登录 URL 的操作。这一般是通过调用模板中的名字action='{% url "login" %}'
或者直接通过路径引用URL来实现的。
我想在一个页面上进行注册和认证。
如果在第一个表单(form1 - authenticate)中输入正确的数据,那么什么都不会发生。
如果在第二个表格(表格 2 - 注册)中输入数据,也不会发生任何事情。但我不明白为什么 ??!!
这是我的第一个项目,所以...
如果你能帮助我,我会非常非常非常高兴!!!
views.py
class RegisterFormView(FormView):
form_class = UserCreationForm
def form_valid(self, form):
form.save()
return super(RegisterFormView, self).form_valid(form)
def get_success_url(self):
return resolve_url('core:mainPage')
def myview(request):
form1 = UserForm(request.POST or None)
form2 = UserCreationForm(request.POST or None)
context = {'form1': form1, 'form2': form2,}
if request.method == 'POST' and form1.is_valid():
user = authenticate(username=form1.cleaned_data['user'], password=form1.cleaned_data['password'])
if user is not None:
if user.is_active:
login(request, user)
render(request, 'core/main_page.html')
else:
return render(request, 'core/main_page.html')
else:
return render(request, 'core/main_page.html')
if request.method == 'POST' and form2.is_valid():
RegisterFormView.form_valid(request, form2)
return render(request, 'core/login.html', context)
login.html
{% extends "core/base.html" %}
{% load widget_tweaks %}
{% block title %} {% endblock %}
{% block content %}
<div class="container header clearfix">
<h3> Авторизация </h3>
<form method="post" class="form-horizontal">
{% csrf_token %}
{% render_field form1.user class="form-control" placeholder="Логин"%}
{% render_field form1.password class="form-control" placeholder="Пароль"%}
{{ form.errors }}
<input type="submit" class="btn btn-default" id="norm">
</form>
<h3>Регистрация</h3>
<form method="post" class="form-horizontal" role="form">
{% csrf_token %}
{% render_field form2.first_name class="form-control" placeholder="Ваше имя"%}
{% render_field form2.last_name class="form-control" placeholder="Ваша фамилия"%}
{% render_field form2.username class="form-control" placeholder="Логин"%}
{% render_field form2.password1 class="form-control" placeholder="Пароль"%}
{% render_field form2.password2 class="form-control" placeholder="Повторите пароль"%}
{% render_field form2.email class="form-control" placeholder="email"%}
{% render_field form2.email class="form-control" placeholder="Повтотрите email"%}
<input type="submit" class="btn btn-default" >
</form>
{% endblock %}
网址
from django.conf.urls import url, include
from django.contrib.auth.views import login, logout
from . import views
urlpatterns = [
url(r'^$', views.MainPage.as_view(), name="mainPage"),
url(r'^support/', views.HowToPrint.as_view(), name="support"),
url(r'^login/', views.myview, name="login"),
url(r'^logout/', logout, name="logout"),
url(r'^thank-you', views.Thanks.as_view(), name="thank-you")
]
您似乎忘记为 post 到 (http://www.w3schools.com/tags/tag_form.asp)
的表格放置位置如果您阅读上面的 link,您会发现表格看起来像这样...
<form action="demo_form.asp" method="get">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="Submit">
</form>
demo_form.asp
指表单发送到的路径。在您的模板中,您需要添加一个将其发送到您的登录 URL 的操作。这一般是通过调用模板中的名字action='{% url "login" %}'
或者直接通过路径引用URL来实现的。