Login
网站首页 > 文章中心 > 其它

Django实战之用户认证_用户登录与注销)

作者:小编 更新时间:2023-08-16 19:34:30 浏览量:394人看过

下面我将详细讲解一下"Django实战之用户认证(用户登录与注销)"的完整攻略,包含两条示例说明.

首先,我们需要在命令行中创建一个新的Django项目,可以通过以下命令实现:


django-admin startproject project_name


其中,project_name 是项目名,可以为任意名字.

此时此刻呢,我们进入项目所在的目录,并创建名为 accounts 的应用,可以使用以下命令:


cd project_name
python manage.py startapp accounts


在 accounts/models.py 中创建用户模型:


from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin

class UserManager(BaseUserManager):
def create_user(self, email, password=None, **kwargs):
    if not email:
        raise ValueError('Users must have an email address')

    user = self.model(email=self.normalize_email(email), **kwargs)
    user.set_password(password)
    user.save()

    return user

def create_superuser(self, email, password=None, **kwargs):
    kwargs.setdefault('is_staff', True)
    kwargs.setdefault('is_superuser', True)

    return self.create_user(email, password, **kwargs)

class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
name = models.CharField(max_length=256)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']

objects = UserManager()

def __str__(self):
    return self.email

def get_full_name(self):
    return self.name

def get_short_name(self):
    return self.name


在 project_name/settings.py 中添加如下代码,在支持 email 做用户名登录的同时,使用新创建的用户模型:


AUTH_USER_MODEL = 'accounts.User'

AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend', # 默认认证后端
'accounts.backends.EmailBackend', # 自定义认证后端
]


在accounts/backends.py中,我们将编写自己的认证后端来支持通过电子邮件登录用户.示例代码如下:


from django.contrib.auth.backends import ModelBackend
from .models import User

class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
    try:
        user = User.objects.get(email=username)
    except User.DoesNotExist:
        return None

    if user.check_password(password):
        return user
    else:
        return None


在 accounts/views.py中,编写login和logout视图用于实现用户的登录和注销.示例代码如下:


from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout

def login_view(request):
if request.method == 'POST':
    email = request.POST.get('email')
    password = request.POST.get('password')

    user = authenticate(request=request, username=email, password=password)
    if user is not None:
        login(request, user)
        return redirect('home')
    else:
        return render(request, 'login.html', {'error': 'Email and password combination is incorrect'})

return render(request, 'login.html')

def logout_view(request):
logout(request)
return redirect('home')


在 accounts/templates/login.html 中,编写登录页面,示例代码如下:


{% csrf_token %} {% if error %}

{{ error }}

{% endif %}

在 project_name/urls.py 中,注册 /login/ 和 /logout/ URL,示例代码如下:


from django.urls import path
from . import views

urlpatterns = [
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
]


至此,我们已经完成了 Django实战之用户认证(用户登录与注销) 的完整攻略,此时此刻呢我将给出两个示例:

示例一:用户通过邮件进行登录

用户通过邮件进行登录,可以在登录页面输入邮件地址和密码进行登录.

示例二:用户通过第三方服务进行登录

用户可以通过第三方服务,如社交媒体平台或Google OAuth等进行登录,可以采用Python第三方库如oauthlib或social-auth-app-django.

以上就是土嘎嘎小编为大家整理的Django实战之用户认证_用户登录与注销)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章