下面是关于“Django auth 应用模块详解”的完整攻略。
Django auth 应用模块详解
什么是 Django auth 应用模块?
Django auth 模块是 Django 框架内置的一个用于认证和授权的应用模块,它提供了一系列的现成的功能和模板,帮助我们快速地实现用户认证和授权的功能。
它包括用户认证、用户注册、忘记密码等功能,并且还有一个非常重要的功能就是用户权限管理。
如何使用 Django auth 应用模块?
步骤 1:安装 Django
在使用 Django auth 应用模块之前,需要先安装 Django。
pip install Django
步骤 2:创建 Django 项目和应用
使用如下命令创建 Django 项目:
django-admin startproject myproject
使用如下命令创建 Django 应用:
python manage.py startapp myapp
步骤 3:配置 Django auth 应用模块
在 myproject/settings.py 配置文件中添加如下配置:
INSTALLED_APPS = [
# ...
'django.contrib.auth',
]
在 myproject/urls.py 文件中添加如下视图路由:
from django.contrib.auth.views import LoginView, LogoutView
urlpatterns = [
# ...
path('login/', LoginView.as_view(), name='login'),
path('logout/', LogoutView.as_view(), name='logout'),
]
以上配置完成后,即可在浏览器中访问相应的 URL 来登录和注销用户。
步骤 4:自定义用户模型
在 Django auth 应用模块中,有一个默认的用户模型(User),但是如果需要添加一些自定义的属性,可以通过继承 AbstractBaseUser 和 PermissionsMixin 来创建一个自定义的用户模型。
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Email is required')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(
email=email,
password=password,
)
user.is_admin = True
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
在 myproject/settings.py 添加如下配置:
AUTH_USER_MODEL = 'myapp.MyUser'
然后运行如下命令创建自定义用户表:
python manage.py makemigrations
python manage.py migrate
步骤 5:访问用户信息
在视图中可以通过 request.user 来访问当前登录的用户信息。如果需要在模板中访问用户信息,可以在上下文中添加 request 对象,如下所示:
def my_view(request):
context = {
'user': request.user,
}
return render(request, 'my_template.html', context)
可以通过使用 Django 的模板标签来访问用户信息:
{% if user.is_authenticated %}
<p>Welcome, {{ user.email }}!</p>
{% else %}
<p>Please log in.</p>
{% endif %}
示例 1:用户注册
以下是基于 Django auth 应用模块实现用户注册的示例。
注册页面(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 %}
注册表单(forms.py)
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
class MyUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = ('email', 'name')
widgets = {
'email': forms.EmailInput(attrs={'class': 'form-control'}),
'name': forms.TextInput(attrs={'class': 'form-control'}),
}
注册视图(views.py)
from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model, login
from .forms import MyUserCreationForm
def register(request):
if request.method == 'POST':
form = MyUserCreationForm(request.POST)
if form.is_valid():
form.save()
user = get_user_model().objects.latest('id')
login(request, user)
return redirect('home')
else:
form = MyUserCreationForm()
context = {
'form': form,
}
return render(request, 'registration/register.html', context)
注册 URL(urls.py)
from django.urls import path
from .views import register
urlpatterns = [
# ...
path('register/', register, name='register'),
]
以上代码实现了一个简单的用户注册页面,并且在用户注册成功后,会自动登录并跳转到首页。
示例 2:忘记密码
以下是基于 Django auth 应用模块实现忘记密码功能的示例。
忘记密码页面(templates/registration/password_reset_form.html)
{% extends 'base.html' %}
{% block content %}
<h2>Forgotten password</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Reset password</button>
</form>
{% endblock %}
忘记密码成功页面(templates/registration/password_reset_done.html)
{% extends 'base.html' %}
{% block content %}
<h2>Forgotten password sent</h2>
<p>We've emailed you instructions for setting your password.</p>
{% endblock %}
重设密码页面(templates/registration/password_reset_confirm.html)
{% extends 'base.html' %}
{% block content %}
<h2>Reset password</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Reset password</button>
</form>
{% endblock %}
重设密码成功页面(templates/registration/password_reset_complete.html)
{% extends 'base.html' %}
{% block content %}
<h2>Password reset complete</h2>
<p>Your password has been set. You can now log in to your account.</p>
{% endblock %}
忘记密码视图(views.py)
from django.contrib.auth import views as auth_views
urlpatterns = [
# ...
path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
以上代码实现了一个完整的忘记密码功能,支持用户填写邮箱地址,重置密码,并通过邮件发送重置密码的链接。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django auth 应用模块详解 - Python技术站