0
点赞
收藏
分享

微信扫一扫

【Django开发】0到1美多商城项目md教程第7篇:登录,1. 互联开发者申请步骤【附代码文档】

美多商城完整教程(附代码资料)主要内容讲述:欢迎来到美多商城!,项目准备。展示用户注册页面,创建用户模块子应用。用户注册业务实现,用户注册前端逻辑。图形验证码,图形验证码接口设计和定义。短信验证码,避免频繁发送短信验证码。账号登录,用户名登录。登录,登录开发文档。用户基本信息,查询并渲染用户基本信息。收货地址,省市区三级联动。收货地址,展示地址前后端逻辑。商品数据库表设计,SPU和SKU。准备商品数据,容器化方案Docker。首页广告,展示首页商品频道分类。商品列表页,列表页面包屑导航。商品搜索,Haystack扩展建立索引。商品详情页,统计分类商品访问量。购物车管理,添加购物车。购物车管理,删除购物车。订单,结算订单。提交订单,使用乐观锁并发下单。对接系统,订单支付功能。页面静态化,首页广告页面静态化。MySQL读写分离,MySQL主从同步。

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

全套教程部分目录:

部分文件图片:

登录

登录开发文档

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

1. 互联开发者申请步骤

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

  • 相关连接:[

3. 网站对接登录步骤

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

1. 定义模型类基类

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

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

1.导入

from LoginTool.tool import OAuth

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

login_url = oauth.get_qq_url()

5.通过Access Token获取OpenID

openid = oauth.get_open_id(access_token)

OAuth2.0认证获取openid

1.请求方式

选项 方案
请求方法 GET
请求地址 /qq/login/

3.响应结果:JSON

字段 说明
code 状态码
errmsg 错误信息
login_url 登录扫码页面链接

5.登录参数

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

2. 接收Authorization Code

  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域名

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已绑定美多商城用户
    # 实现状态保持
    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未绑定用户的处理

oauth_callback.html中渲染access_token

<input v-model="access_token" type="hidden" name="access_token" value="{{ access_token }}">

4. 补充itsdangerous的使用

补充:openid签名处理

  • oauth.utils.py
def generate_eccess_token(openid):
    """
    签名openid
    :param openid: 用户的openid
    :return: access_token
    """
    serializer = Serializer(settings.SECRET_KEY, expires_in=constants.ACCESS_TOKEN_EXPIRES)
    data = {'openid': openid}
    token = serializer.dumps(data)
    return token.decode()

openid绑定用户实现

以下是要实现的后端逻辑

  1. 用户模型补充email_active字段
  2. 查询并渲染用户基本信息
  3. 添加邮箱
  4. 发送邮箱验证邮件
  5. 验证邮箱

提示:

  • 用户添加邮箱时,界面的局部刷新,我们选择使用Vue.js来实现。

未完待续, 同学们请等待下一期

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

举报

相关推荐

0 条评论