下面是关于"Django auth 应用模块详解"的完整攻略.
Django auth 模块是 Django 框架内置的一个用于认证和授权的应用模块,它提供了一系列的现成的功能和模板,帮助我们快速地实现用户认证和授权的功能.
它包括用户认证、用户注册、忘记密码等功能,并且还有一个非常重要的功能就是用户权限管理.
在使用 Django auth 应用模块之前,需要先安装 Django.
pip install Django
使用如下命令创建 Django 项目:
django-admin startproject myproject
使用如下命令创建 Django 应用:
python manage.py startapp myapp
在 myproject/settings.py 配置文件中添加如下配置:
INSTALLED_APPS = [
'django.contrib.auth',
]
在 myproject/urls.py 文件中添加如下视图路由:
from django.contrib.auth.views import LoginView, LogoutView
urlpatterns = [
path('logout/', LogoutView.as_view(), name='logout'),
]
以上配置完成后,即可在浏览器中访问相应的 URL 来登录和注销用户.
在 Django auth 应用模块中,有一个默认的用户模型(User),但是如果需要添加一些自定义的属性,可以通过继承 AbstractBaseUser 和 PermissionsMixin 来创建一个自定义的用户模型.
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
class MyUserManager(BaseUserManager):
return self.is_admin
在 myproject/settings.py 添加如下配置:
AUTH_USER_MODEL = 'myapp.MyUser'
然后运行如下命令创建自定义用户表:
python manage.py makemigrations
python manage.py migrate
在视图中可以通过 request.user 来访问当前登录的用户信息.如果需要在模板中访问用户信息,可以在上下文中添加 request 对象,如下所示:
def my_view(request):
return render(request, 'my_template.html', context)
可以通过使用 Django 的模板标签来访问用户信息:
{% if user.is_authenticated %}
Welcome, {{ user.email }}!
{% else %}
Please log in.
{% endif %}
以下是基于 Django auth 应用模块实现用户注册的示例.
{% extends 'base.html' %}
{% block content %}
Register
{% endblock %}
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
class MyUserCreationForm(UserCreationForm):
}
from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model, login
from .forms import MyUserCreationForm
def register(request):
return render(request, 'registration/register.html', context)
from django.urls import path
from .views import register
urlpatterns = [
path('register/', register, name='register'),
]
以上代码实现了一个简单的用户注册页面,并且在用户注册成功后,会自动登录并跳转到首页.
以下是基于 Django auth 应用模块实现忘记密码功能的示例.
忘记密码页面(templates/registration/password_reset_form.html)
{% extends 'base.html' %}
{% block content %}
Forgotten password
{% endblock %}
忘记密码成功页面(templates/registration/password_reset_done.html)
{% extends 'base.html' %}
{% block content %}
Forgotten password sent
We've emailed you instructions for setting your password.
{% endblock %}
重设密码页面(templates/registration/password_reset_confirm.html)
{% extends 'base.html' %}
{% block content %}
Reset password
{% endblock %}
重设密码成功页面(templates/registration/password_reset_complete.html)
{% extends 'base.html' %}
{% block content %}
Password reset complete
Your password has been set. You can now log in to your account.
{% endblock %}
from django.contrib.auth import views as auth_views
urlpatterns = [
path('reset///', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
以上代码实现了一个完整的忘记密码功能,支持用户填写邮箱地址,重置密码,并通过邮件发送重置密码的链接.