diff --git a/.scannerwork/.sonar_lock b/.scannerwork/.sonar_lock new file mode 100644 index 0000000..e69de29 diff --git a/.sonar/.sonar_lock b/.sonar/.sonar_lock new file mode 100644 index 0000000..e69de29 diff --git a/.sonar/report-task.txt b/.sonar/report-task.txt new file mode 100644 index 0000000..69be16b --- /dev/null +++ b/.sonar/report-task.txt @@ -0,0 +1,6 @@ +projectKey=DjangoBlog3 +serverUrl=http://localhost:9000 +serverVersion=25.11.0.114957 +dashboardUrl=http://localhost:9000/dashboard?id=DjangoBlog3 +ceTaskId=dda54cf7-c33c-4991-95ee-91be04fa807a +ceTaskUrl=http://localhost:9000/api/ce/task?id=dda54cf7-c33c-4991-95ee-91be04fa807a diff --git a/accounts/urls.py b/accounts/urls.py index 107a801..f0375bd 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -4,25 +4,51 @@ from django.urls import re_path from . import views from .forms import LoginForm +# 指定命名空间,方便在模板或其他地方反向解析 URL app_name = "accounts" -urlpatterns = [re_path(r'^login/$', - views.LoginView.as_view(success_url='/'), - name='login', - kwargs={'authentication_form': LoginForm}), - re_path(r'^register/$', - views.RegisterView.as_view(success_url="/"), - name='register'), - re_path(r'^logout/$', - views.LogoutView.as_view(), - name='logout'), - path(r'account/result.html', - views.account_result, - name='result'), - re_path(r'^forget_password/$', - views.ForgetPasswordView.as_view(), - name='forget_password'), - re_path(r'^forget_password_code/$', - views.ForgetPasswordEmailCode.as_view(), - name='forget_password_code'), - ] +# URL 配置列表 +urlpatterns = [ + # 登录页面 + re_path( + r'^login/$', # 匹配 URL /login/ + views.LoginView.as_view(success_url='/'), # 使用自定义 LoginView,登录成功后跳转到主页 '/' + name='login', # URL 名称,反向解析使用 + kwargs={'authentication_form': LoginForm} # 使用自定义登录表单 LoginForm + ), + + # 注册页面 + re_path( + r'^register/$', # 匹配 URL /register/ + views.RegisterView.as_view(success_url="/"), # 注册成功后跳转到主页 '/' + name='register' + ), + + # 登出页面 + re_path( + r'^logout/$', # 匹配 URL /logout/ + views.LogoutView.as_view(), # 使用 Django 内置 LogoutView + name='logout' + ), + + # 账户操作结果页面(如修改信息后的结果展示) + path( + r'account/result.html', # 匹配 URL /account/result.html + views.account_result, # 调用 account_result 函数视图 + name='result' + ), + + # 忘记密码页面 + re_path( + r'^forget_password/$', # 匹配 URL /forget_password/ + views.ForgetPasswordView.as_view(), # 使用 ForgetPasswordView 类视图 + name='forget_password' + ), + + # 发送忘记密码验证码 + re_path( + r'^forget_password_code/$', # 匹配 URL /forget_password_code/ + views.ForgetPasswordEmailCode.as_view(), # 使用 ForgetPasswordEmailCode 类视图处理发送验证码 + name='forget_password_code' + ), +] diff --git a/accounts/user_login_backend.py b/accounts/user_login_backend.py index 73cdca1..4913a6f 100644 --- a/accounts/user_login_backend.py +++ b/accounts/user_login_backend.py @@ -1,26 +1,61 @@ from django.contrib.auth import get_user_model from django.contrib.auth.backends import ModelBackend - class EmailOrUsernameModelBackend(ModelBackend): """ - 允许使用用户名或邮箱登录 + 自定义认证后端,允许用户使用 **用户名或邮箱** 登录。 + + 功能说明: + 1. 用户可以在登录框中输入用户名或邮箱。 + 2. 系统会自动判断输入内容中是否包含 '@': + - 如果有 '@',认为是邮箱,使用 email 字段查找用户。 + - 如果没有 '@',认为是用户名,使用 username 字段查找用户。 + 3. 验证密码正确后返回对应的 User 对象。 + 4. 如果用户不存在或密码错误,返回 None。 """ def authenticate(self, request, username=None, password=None, **kwargs): + """ + 重写认证方法 + + 参数: + - request: 当前请求对象 + - username: 用户输入的用户名或邮箱 + - password: 用户输入的密码 + - **kwargs: 其他可选参数 + + 返回值: + - User 对象(认证成功) + - None(认证失败) + """ + # 判断输入的是邮箱还是用户名 if '@' in username: - kwargs = {'email': username} + kwargs = {'email': username} # 邮箱登录 else: - kwargs = {'username': username} + kwargs = {'username': username} # 用户名登录 + try: + # 根据条件获取用户对象 user = get_user_model().objects.get(**kwargs) + # 验证密码 if user.check_password(password): return user except get_user_model().DoesNotExist: + # 用户不存在,返回 None return None - def get_user(self, username): + def get_user(self, user_id): + """ + 根据用户 ID 获取 User 对象 + + 参数: + - user_id: 用户的主键 ID + + 返回值: + - User 对象(存在) + - None(不存在) + """ try: - return get_user_model().objects.get(pk=username) + return get_user_model().objects.get(pk=user_id) except get_user_model().DoesNotExist: return None diff --git a/et --hard HEAD~1 b/et --hard HEAD~1 new file mode 100644 index 0000000..7edde77 --- /dev/null +++ b/et --hard HEAD~1 @@ -0,0 +1,47 @@ +212afac (HEAD -> hyy_branch, origin/hyy_branch) merge develop &手动加注释' +0477027 oauth注释 +2b451b4 Merge pull request '合并个人代码注释' (#15) from my_branch into develop +8561ef5 补充migrations文件代码注释 +3f778ab Merge pull request '代码注释' (#14) from gq_branch into develop +f641a52 merge develop & 手动注释 +7f4f413 Merge pull request '第六周个人实践任务' (#13) from zrp_branch into develop +0b382f5 第六周个人实践任务 +e281e56 Merge pull request '代码注释' (#12) from gq_branch into develop +632ac91 merge develop & 手动注释 +0317e95 Merge pull request '合并个人代码注释' (#11) from my_branch into develop +97580a9 补充注释 +de7ab44 Merge pull request '第五周个人实践任务' (#10) from zrp_branch into develop +6cf665e 第五周代码注释 +8351c49 Merge pull request 'accounth注释&模型字段&static补充' (#9) from hyy_branch into develop +ad16f45 add blog/static files +e1d0e5e merge develop &account加注释2&生成模型字段表 +8dd8232 Merge pull request '代码注释' (#8) from gq_branch into develop +cd4de20 Merge pull request '第五周个人实践任务' (#7) from zrp_branch into develop +ee14e71 merge develop & 手动加注释 +13d565b merge develop & 手动加注释 +78b34b2 Merge pull request '合并个人代码注释' (#6) from my_branch into develop +b0936c0 添加注释 +a8948bc Merge pull request 'accounth注释' (#5) from hyy_branch into develop +5854b4e account: 补充注释 +d961cd1 merge develop & 保留整套代码 +4522284 account增加注释 +b330bf8 (origin/master) Merge pull request '合并分项工作到develop分支' (#4) from zrp_branch into develop +e10fa45 Merge pull request '合并分项工作到develop分支' (#3) from wxr_branch into develop +94c9637 Merge pull request '合并分项工作到develop分支' (#2) from gq_branch into develop +0c87743 Merge pull request '合并分项工作到develop分支' (#1) from my_branch into develop +22600a0 上传文件到远程 zrp_branch +c07d263 上传第四周任务 +fbe60ca 上传第四周任务 +5a2f7c5 上传文件到远程 gq_branch +6dac1cc 上传文件到远程zrp_branch +8623ec3 上传文件到远程 gq_branch +a2a323b Merge branch 'wxr_branch' of https://bdgit.educoder.net/pwe53ixz6/DjangoBlog into wxr_branch +076fef0 新增测试上传文件 +fd754d9 新增测试上传文件 +7bda1cf 上传文件到远程 develop +792ea01 上传文件到远程 wxr_branch +e5cd1d7 上传文件到远程 my_branch +a70efd4 新增测试上传文件 +1c2f60f Add .github +6188b19 ADD file via upload +7f57763 (origin/src, origin/doc) Initial commit diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..676bbd4 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,11 @@ +sonar.projectKey=DjangoBlog +sonar.projectName=DjangoBlog +sonar.projectVersion=1.0 +sonar.sources=. +sonar.language=py +sonar.sourceEncoding=UTF-8 +sonar.python.coverage.reportPaths=coverage.xml + +# ?? SonarQube ?? +sonar.host.url=http://localhost:9000 +