📜  使用多个 html 表单 django - Html (1)

📅  最后修改于: 2023-12-03 15:06:55.879000             🧑  作者: Mango

使用多个 HTML 表单 in Django - HTML

在 Django 中,HTML 表单是非常常见的功能。但是,在某些情况下,我们需要使用多个 HTML 表单来完成一项任务,例如注册流程。

本文将介绍如何在 Django 中使用多个 HTML 表单来完成一个复杂的任务,并且使用 class-based views 来实现。

步骤 1:创建模型

首先,我们需要创建一个模型来存储用户的信息。在本例中,我们将创建一个名为 User 的模型,其中包含两个字段 usernameemail

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=255)
    email = models.EmailField()
步骤 2:创建表单

我们需要创建两个表单:UserRegistrationFormUserLoginForm

  • UserRegistrationForm 包含 usernameemailpassword 字段。
  • UserLoginForm 包含 usernamepassword 字段。
from django import forms

class UserRegistrationForm(forms.Form):
    username = forms.CharField(max_length=255)
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)

class UserLoginForm(forms.Form):
    username = forms.CharField(max_length=255)
    password = forms.CharField(widget=forms.PasswordInput)
步骤 3:创建视图

我们需要创建两个视图 UserRegistrationViewUserLoginView

from django.shortcuts import render, redirect
from django.views import View
from .forms import UserRegistrationForm, UserLoginForm
from .models import User

class UserRegistrationView(View):
    def get(self, request):
        form = UserRegistrationForm()
        return render(request, 'registration.html', {'form': form})

    def post(self, request):
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']

            # Create user
            user = User.objects.create(username=username, email=email)

            # Redirect to success page
            return redirect('registration_success')
        else:
            return render(request, 'registration.html', {'form': form})

class UserLoginView(View):
    def get(self, request):
        form = UserLoginForm()
        return render(request, 'login.html', {'form': form})

    def post(self, request):
        form = UserLoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            # Authenticate user
            user = authenticate(username=username, password=password)

            # Login user
            login(request, user)

            # Redirect to success page
            return redirect('login_success')
        else:
            return render(request, 'login.html', {'form': form})
步骤 4:创建模板

最后,我们需要创建两个模板 registration.htmllogin.html,并在模板中使用表单。

<!-- registration.html -->

<h2>Registration</h2>

{% if form.errors %}
  <p>Please correct the errors below:</p>
  <ul>
    {% for error in form.errors %}
      <li>{{ error }}</li>
    {% endfor %}
  </ul>
{% endif %}

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}

  <button type="submit">Register</button>
</form>
<!-- login.html -->

<h2>Login</h2>

{% if form.errors %}
  <p>Please correct the errors below:</p>
  <ul>
    {% for error in form.errors %}
      <li>{{ error }}</li>
    {% endfor %}
  </ul>
{% endif %}

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}

  <button type="submit">Login</button>
</form>

到此为止,我们已经成功地创建了两个 HTML 表单和两个视图来处理这些表单。现在您可以添加一些额外的逻辑,例如在注册成功后登录用户。

整个项目的完整代码可以在 GitHub 上找到。

总结

在本文中,我们介绍了如何在 Django 中使用多个 HTML 表单来完成一个复杂的任务,并且使用 class-based views 来实现。学习全文后,您现在可以创建自己的多个 HTML 表单并将其整合到您的 Django 应用程序中。