Django注册和身份验证

时间:2016-08-07 21:59:48

标签: django django-views django-authentication django-registration

我想在一页上进行注册和验证。

如果以第一种形式(form1 - authenticate)输入正确的数据,则不会发生任何事情。

如果以第二种形式输入数据(form2 - 注册),那么也不会发生任何事情。但我不明白为什么?? !!

这是我的第一个产品,所以......

如果你帮助我,我将非常非常高兴!!!

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")
]

1 个答案:

答案 0 :(得分:0)

此处显示您忘记为表单添加地址(http://www.w3schools.com/tags/tag_form.asp

如果您阅读上面的链接,您会看到表单看起来像这样......

<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。