在这一部分,我们将继续扩展 Django 应用,添加用户认证和注册功能。以下是第四部分的步骤:

步骤1:更新模型

在 helloworldapp/models.py 中,为用户创建一个模型,该模型继承自 AbstractUser,并添加一个字段 greeting:
# helloworldapp/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    greeting = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.username

步骤2:更新数据库

运行以下命令进行数据库迁移,以应用新的用户模型:
python manage.py makemigrations
python manage.py migrate

步骤3:创建用户表单

在 helloworldapp/forms.py 中,创建一个表单类用于用户注册:
# helloworldapp/forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ('greeting',)

步骤4:更新视图

在 helloworldapp/views.py 中,更新 hello 视图函数,以便处理用户注册表单的提交:
# helloworldapp/views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from .models import Greeting, CustomUser
from .forms import GreetingForm, CustomUserCreationForm

@login_required
def hello(request):
    if request.method == 'POST':
        form = GreetingForm(request.POST)
        if form.is_valid():
            message = form.cleaned_data['message']
            Greeting.objects.all().delete()
            Greeting.objects.create(message=message)
            return redirect('hello')
    else:
        form = GreetingForm()

    greeting = Greeting.objects.first()
    return render(request, 'helloworldapp/hello.html', {'greeting': greeting, 'form': form})

def register(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
    else:
        form = CustomUserCreationForm()

    return render(request, 'registration/register.html', {'form': form})

步骤5:创建注册模板

在 helloworldapp/templates/registration/register.html 中,创建一个模板文件用于用户注册:
<!-- helloworldapp/templates/registration/register.html -->

{% extends 'base.html' %}

{% block content %}
  <h2>Register</h2>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Register</button>
  </form>
{% endblock %}

步骤6:更新 URL 路由

在 helloworldapp/urls.py 中,添加一个 URL 路由用于注册页面:
# helloworldapp/urls.py

from django.urls import path
from .views import hello, register

urlpatterns = [
    path('hello/', hello, name='hello'),
    path('register/', register, name='register'),
]

步骤7:更新主 URL 路由

在 helloworldproject/urls.py 中,添加一个 URL 路由用于应用程序的主页面:
# helloworldproject/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('helloworld/', include('helloworldapp.urls')),
    path('', include('django.contrib.auth.urls')),  # 使用内置的用户认证视图
]

步骤8:创建超级用户

如果你还没有创建超级用户,运行以下命令创建一个:
python manage.py createsuperuser

步骤9:运行开发服务器

确保你的开发服务器正在运行:
python manage.py runserver

现在,你可以在浏览器中访问 http://127.0.0.1:8000/helloworld/hello/ 查看主页面,或者访问 http://127.0.0.1:8000/helloworld/register/ 进行用户注册。

这样,你的 Django 应用已经包含了用户认证和注册功能。在后续学习中,你可以进一步了解 Django 的用户权限、视图装饰器等更高级的主题。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7126/Django