【Django开发】前后端分离django美多商某城项目第7篇:登录,登录开发文档【附代码文档】

举报
程序员一诺python 发表于 2025/10/10 08:19:50 2025/10/10
【摘要】 1.用户管理系统涵盖shou货地址(省市区三级联动、新增地址、设置默认地址、修改地址标题)、修改 、用户中心功能。2. 产品管理包括产品数据库表设计、SPU和SKU概念、首页ad数据库表分析、产品数据准备、Django文件存储类、产品列表页(面包屑导航、分页排序)。3. 搜索功能涵盖产品搜索、Haystack扩展索引建立、全文检索测试、搜索结果渲染。4. 产品详情系统包括详情页

🏆🏆🏆教程全知识点简介:1.用户管理系统涵盖shou货地址(省市区三级联动、新增地址、设置默认地址、修改地址标题)、修改 、用户中心功能。2. 产品管理包括产品数据库表设计、SPU和SKU概念、首页ad数据库表分析、产品数据准备、Django文件存储类、产品列表页(面包屑导航、分页排序)。3. 搜索功能涵盖产品搜索、Haystack扩展索引建立、全文检索测试、搜索结果渲染。4. 产品详情系统包括详情页分析准备、SKU详情信息渲染、产品访问量统计、浏览记录存储方案。5. 购wu车管理涉及添加购wu车、展示产品页面购wu车功能。6. 订order单系统包括订order单数据库表创建、订order单基本信息保存、事务保存订order单数据、乐观锁并发下单、订order单提交。7. 支fu系统涵盖 介绍(沙箱环境、开发文档、网站支fu流程、RSA2公私钥配置)、 系统对接、订order单支fu功能、支fu结果保存。8. 项目部署包括容器化方案Docker、页面静态化、数据库主从配置(从机端口号、二进制日志文件、主从连接)。9. 项目工程配置涵盖工程日志配置、前端静态文件配置、工程创建配置、项目准备。10. 用户认证系统包括用户注册(注册页面展示、业务实现、前端逻辑、参数验证、数据保存)、状态保持、图形验证码、sms_code验证玛(容联云通讯平台、pipeline操作Redis、RabbitMQ消息队列)、账号登录、 登录(OAuth2.0认证、openid处理、用户绑定)、用户基本信息管理、邮箱添加。


📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/455836    中查看

📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/455836    中查看

📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/453508    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

登录

登录开发文档

登录:即 所说的第三方登录,是指用户可以不在本项目中输入 ,而直接通过第三方的验证,成功登录本项目。

1. 互联开发者申请步骤

若想实现登录,需要成为互联的开发者,审核通过才可实现。

  • 相关连接:[

2. 互联应用申请步骤

成为互联开发者后,还需创建应用,即获取本项目对应与互联的应用ID。

  • 相关连接:[

3. 网站对接登录步骤

互联提供有开发文档,帮助开发者实现登录。

  • 相关连接:[

4. 登录流程分析

图片无法加载

5. 知识要点

  1. 当 在对接第三方平台的接口时,一定要认真阅读第三方平台提供的文档。文档中一定会有接口的使用说明,方便 开发。

定义登录模型类

登录成功后, 需要将用户和美多商场用户关联到一起,方便下次登录时使用,所以 选择使用MySQL数据库进行存储。

1. 定义模型类基类

为了给项目中模型类补充数据创建时间更新时间两个字段, 需要定义模型类基类。 在meiduo_mall.utils/models.py文件中创建模型类基类。

from django.db import models

class BaseModel(models.Model):
    """为模型类补充字段"""

    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    class Meta:
        abstract = True  # 说明是抽象模型类, 用于继承使用,数据库迁移时不会创建BaseModel的表

2. 定义登录模型类

创建一个新的应用oauth,用来实现第三方认证登录。

# oauth


url(r'^oauth/', include('oauth.urls')),

oauth/models.py中定义身份(openid)与用户模型类User的关联关系

from django.db import models

from meiduo_mall.utils.models import BaseModel


# Create your models here.s




class OAuthUser(BaseModel):
    """登录用户数据"""
    user = models.ForeignKey('users.User', on_delete=models.CASCADE, verbose_name='用户')
    openid = models.C harField(max_length=64, verbose_name='openid', db_index=True)

    class Meta:
        db_table = 'tb_oauth_qq'
        verbose_name = '登录用户数据'
        verbose_name_plural = verbose_name

3. 迁移登录模型类

$ python manage.py makemigrations
$ python manage.py migrate

图片无法加载

登录工具LoginTool

1. LoginTool介绍

  • 该工具封装了登录时对接互联接口的请求操作。可用于快速实现登录。

2. LoginTool安装

pip install LoginTool

3. LoginTool使用说明

1.导入

from LoginTool.tool import OAuth

2.初始化OAuth对象

oauth = OAuth(client_id=settings._CLIENT_ID, client_secret=settings._CLIENT_SECRET, redirect_uri=settings._REDIRECT_URI, state=next)

3.获取登录扫码页面,扫码后得到Authorization Code

login_url = oauth.get_qq_url()

4.通过Authorization Code获取Access Token

access_token = oauth.get_access_token(code)

5.通过Access Token获取OpenID

openid = oauth.get_open_id(access_token)

OAuth2.0认证获取openid

待处理业务逻辑

# 提取code请求参数




# 使用code向服务器请求access_token




# 使用access_token向服务器请求openid




# 使用openid查询该用户是否在美多商某城中绑定过用户




# 如果openid已绑定美多商某城用户,直接生成JWT token,并返回




# 如果openid没绑定美多商某城用户,创建用户并绑定到openid

1. 获取登录扫码页面

1.请求方式

选项 方案
请求方法 GET
请求地址 /qq/login/
>
2.请求参数:查询参数
参数名 类型 是否必传 说明
next string 用于记录登录成功后进入的网址
>
3.响应结果:JSON
字段 说明
code 状态码
errmsg 错误信息
login_url 登录扫码页面链接
>
4.后端逻辑实现
class AuthURLView(View):
    """提供登录页面网址

    """
    def get(self, request):
        # next表示从哪个页面进入到的登录页面,将来登录成功后,就自动回到那个页面
        next = request.GET.get('next')

        # 获取登录页面网址
        oauth = OAuth(client_id=settings._CLIENT_ID, client_secret=settings._CLIENT_SECRET, redirect_uri=settings._REDIRECT_URI, state=next)
        login_url = oauth.get_qq_url()

        return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'login_url':login_url})

5.登录参数

_CLIENT_ID = '101518219'
_CLIENT_SECRET = '418d84ebdc7241efb79536886ae95224'
_REDIRECT_URI = '

2. 接收Authorization Code

提示:

  • 用户在登录成功后,会将用户重定向到 配置的回调网址。
  • 在重定向到回调网址时,会传给 一个Authorization Code
  • 需要拿到Authorization Code完成OAuth2.0认证获取openid
  • 在本项目中, 申请登录开发资质时配置的回调网址为:

  • `

  • 互联重定向的完整网址为:

  • `

class AuthUserView(View):
    """用户扫码登录的回调处理"""

    def get(self, request):
        """Oauth2.0认证"""
        # 接收Authorization Code
        code = request.GET.get('code')
        if not code:
            return http.HttpResponseForbidden('缺少code')
        pass
url(r'^oauth_callback/$', views.AuthUserView.as_view()),

3. OAuth2.0认证获取openid

  1. 使用code向服务器请求access_token
  2. 使用access_token向服务器请求openid
class AuthUserView(View):
    """用户扫码登录的回调处理"""

    def get(self, request):
        """Oauth2.0认证"""
        # 提取code请求参数
        code = request.GET.get('code')
        if not code:
            return http.HttpResponseForbidden('缺少code')

        # 创建工具对象
        oauth = OAuth(client_id=settings._CLIENT_ID, client_secret=settings._CLIENT_SECRET, redirect_uri=settings._REDIRECT_URI)

        try:
            # 使用code向服务器请求access_token
            access_token = oauth.get_access_token(code)

            # 使用access_token向服务器请求openid
            openid = oauth.get_open_id(access_token)
        except Exception as e:
            logger.error(e)
            return http.HttpResponseServerError('OAuth2.0认证失败')
        pass

4. 本机绑定www.meiduo.site域名

1.ubuntu系统或者Mac系统

编辑 /etc/hosts

2.Windows系统

编辑 C:\Windows\System32\drivers\etc\hosts

openid是否绑定用户的处理

1. 判断openid是否绑定过用户

使用openid查询该用户是否在美多商某城中绑定过用户。

try:
    oauth_user = OAuthUser.objects.get(openid=openid)
except OAuthUser.DoesNotExist:
    # 如果openid没绑定美多商某城用户
    pass
else:
    # 如果openid已绑定美多商某城用户
    pass

2. openid已绑定用户的处理

如果openid已绑定美多商某城用户,直接生成状态保持信息,登录成功,并重定向到首页。

try:
    oauth_user = OAuthUser.objects.get(openid=openid)
except OAuthUser.DoesNotExist:
    # 如果openid没绑定美多商某城用户
    pass
else:
    # 如果openid已绑定美多商某城用户
    # 实现状态保持
    qq_user = oauth_user.user
    login(request, qq_user)

    # 响应结果
    next = request.GET.get('state')
    response = redirect(next)

    # 登录时用户名写入到cookie,有效期15天
    response.set_cookie('username', qq_user.username, max_age=3600 * 24 * 15)

    return response

3. openid未绑定用户的处理

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。