feat(认证): 添加用户登录和注销功能
添加用户认证功能,包括登录页面、视图逻辑和模板 配置登录URL设置并保护首页视图需要认证 在导航栏添加登录状态显示和操作按钮
This commit is contained in:
@@ -5,6 +5,9 @@ from django.db.models import Count
|
||||
from django.core.mail import send_mail, EmailMessage
|
||||
from django.conf import settings
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib import messages
|
||||
from datetime import timedelta, datetime
|
||||
import os
|
||||
from loguru import logger
|
||||
@@ -55,6 +58,7 @@ from .forms import (
|
||||
)
|
||||
|
||||
# 首页视图
|
||||
@login_required
|
||||
def index(request):
|
||||
"""首页"""
|
||||
logger.info("用户访问首页")
|
||||
@@ -864,3 +868,39 @@ def api_submit_summary(request):
|
||||
except Exception as e:
|
||||
logger.error(f"API: 提交汇总记录失败: {str(e)}")
|
||||
return JsonResponse({'success': False, 'message': f"提交失败: {str(e)}"}, status=500)
|
||||
|
||||
# 登录视图
|
||||
def user_login(request):
|
||||
"""用户登录"""
|
||||
if request.user.is_authenticated:
|
||||
logger.info(f"用户 {request.user.username} 已登录,重定向到首页")
|
||||
return redirect('index')
|
||||
|
||||
if request.method == 'POST':
|
||||
username = request.POST.get('username')
|
||||
password = request.POST.get('password')
|
||||
|
||||
logger.info(f"用户登录尝试: {username}")
|
||||
|
||||
user = authenticate(request, username=username, password=password)
|
||||
|
||||
if user is not None:
|
||||
login(request, user)
|
||||
logger.info(f"用户 {username} 登录成功")
|
||||
messages.success(request, '登录成功!')
|
||||
return redirect('index')
|
||||
else:
|
||||
logger.warning(f"用户 {username} 登录失败: 用户名或密码错误")
|
||||
messages.error(request, '用户名或密码错误,请重新尝试。')
|
||||
|
||||
return render(request, 'core/login.html')
|
||||
|
||||
# 注销视图
|
||||
def user_logout(request):
|
||||
"""用户注销"""
|
||||
if request.user.is_authenticated:
|
||||
logger.info(f"用户 {request.user.username} 注销")
|
||||
logout(request)
|
||||
messages.success(request, '已成功注销!')
|
||||
|
||||
return redirect('login')
|
||||
|
||||
Reference in New Issue
Block a user