Django第三方登录(QQ登录)

python编程快速上手(持续更新中…)

python实战项目(Django技术点)


1、业务分析

在这里插入图片描述
在这里插入图片描述

2、OAuth2.0认证获取openid(settings)

# QQ登录参数# 我们申请的 客户端id
QQ_CLIENT_ID = '101474184'# 我们申请的 客户端秘钥
QQ_CLIENT_SECRET = 'c6ce949e04e12ecc909ae6a8b09b637c'# 我们申请时添加的: 登录成功后回调的路径
QQ_REDIRECT_URI = 'http://www.meiduo.site:8080/oauth_callback.html'

3、步骤

生成用户绑定链接->获取code->获取token->获取openid->保存openid

A/QQLoginTool安装

pip install QQLoginTool

B/生产用户绑定链接

from django.views import View
from QQLoginTool.QQtool import OAuthQQ
from meiduo_mall import settings
from django.http import JsonResponse


class QQLoginURLView(View):

    def get(self, request):
        # 1. 生成 QQLoginTool 实例对象
        # client_id=None,               appid
        # client_secret=None,           appsecret
        # redirect_uri=None,            用户同意登录之后,跳转的页面
        # state=None                    不知道什么意思,随便写。等出了问题再分析问题
        qq = OAuthQQ(client_id=settings.QQ_CLIENT_ID,
                     client_secret=settings.QQ_CLIENT_SECRET,
                     redirect_uri=settings.QQ_REDIRECT_URI,
                     state='xxxxx')
        # 2. 调用对象的方法生成跳转链接
        qq_login_url = qq.get_qq_url()
        # 3. 返回响应
        return JsonResponse({'code': 0, 'errmsg': 'ok', 'login_url': qq_login_url})

C/获取openid

在这里插入图片描述
在这里插入图片描述

D/保存绑定信息

在这里插入图片描述
在这里插入图片描述

E/代码实现

def post(self, request):
    # 1. 接收请求
    data = json.loads(request.body.decode())
    # 2. 获取请求参数  openid
    mobile = data.get('mobile')
    password = data.get('password')
    sms_code = data.get('sms_code')
    openid = data.get('access_token')
    # 需要对数据进行验证(省略)

    # 添加对 access-token 解密
    # from apps.oauth.utils import check_access_token
    # openid = check_access_token(access_token)
    if openid is None:
        return JsonResponse({'code': 400, 'errmsg': '参数缺失'})

    # 3. 根据手机号进行用户信息的查询
    try:
        user = User.objects.get(mobile=mobile)
    except User.DoesNotExist:
        # 手机号不存在
        # 5. 查询到用户手机号没有注册。我们就创建一个user信息。然后再绑定
        user = User.objects.create_user(username=mobile, mobile=mobile, password=password)

    else:
        # 手机号存在
        # 4. 查询到用户手机号已经注册了。判断密码是否正确。密码正确就可以直接保存(绑定) 用户和openid信息
        if not user.check_password(password):
            return JsonResponse({'code': 400, 'errmsg': '账号或密码错误'})

    OAuthQQUser.objects.create(user=user, openid=openid)

    # 6. 完成状态保持
    login(request, user)
    # 7. 返回响应
    response = JsonResponse({'code': 0, 'errmsg': 'ok'})

    response.set_cookie('username', user.username)

    return response

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值