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来实现的。