zoukankan      html  css  js  c++  java
  • Python

    开发准备

    开通微博开发者权限

    点击这里 进入 微博开放平台

    开通后权限后创建应用 

    创建网页应用, 此处不需要进行审核即可使用测试环境

    开发环境信息

    此处一些信息是很重要的东西, 比如 App_key 以及 App_Serert

    配置互传接口

    回调页面也进行设置, 之后要用此接口进行信息回传

    文档说明

    基于 OAuth2.0 协议进行认证, 点击此文档

    重点接口

    授权以及token

    授权接口使用

    点击这里 官方说明

    通过阅读官方说明得知是 可以以 get/post 方式进行请求. URL 的生成和支付宝类似, 但是不需要加密

    因此会简单很多, 注意看必填字段即可

    生成请求地址

    直接使用拼接即可生成 url 进行访问

    def get_auth_url():
        weibo_auth_url = "https://api.weibo.com/oauth2/authorize"
        redirect_url = "http://127.0.0.1:8000/complete/weibo/"
        auth_url = weibo_auth_url + "?client_id={0}&redirect_uri={1}".format("3470xxx2804", redirect_url)
    
        print(auth_url)

    成功请求

    根据生成的 url 访问, 会跳转到 微博提供的登录授权页面,然后登录后

    会跳转到一个链接地址, 并且参数会提供一串 code 

    Token接口使用

    点击这里查看 官方文档说明

    查阅官方说明可见, 此接口方式必须是 post 方式且需要提供之前 授权接口拿到的 token 才可以可以进行使用

    发送请求

    利用 request 进行 post 的请求

    def get_access_token(code="cbf6cccccccccccc6f8e7df1a9dd1c7"):
        access_token_url = "https://api.weibo.com/oauth2/access_token"
        import requests
        re_dict = requests.post(access_token_url, data={
            "client_id": "347nnnnn04",
            "client_secret": "836c9d55a8xxxxxxxa5e2d08b77c8c31bd1",
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": "http://127.0.0.1:8000/complete/weibo/"
        })
        pass

    请求回传

    请求回传中可以拿到一串认证信息 , 包括 uid,以及 access_token , 至此算是授权登录成功, 基于这些信息才可以进行其他必须登录后的访问操作

     

    测试授权后操作验证

    编写一个访问用户信息的接口进行生成操作, 用户信息接口官方文档如下  点击这里

    访问成功后的回传数据, 可见测试成功

    social-auth-app-django 

    别人造的轮子又大又圆

    social-auth-app-django 组件已经集成好了我们上面的那一堆繁琐的操作

    github 点这里

    官方文档 点这里

    安装

    From pypi:
    
    $ pip install social-auth-app-django
    And
    for MongoEngine ORM: $ pip install social-auth-app-django-mongoengine

    注册

    Add the application to INSTALLED_APPS setting, for default ORM:
    
    INSTALLED_APPS = (
        ...
        'social_django',
        ...
    )

    And
    for MongoEngine ORM: INSTALLED_APPS = ( ... 'social_django_mongoengine', ... )

    迁移初始化

    更改数据库引擎

    使用 social-auth-app-django 组件必须要将数据库的 引擎改为 innodb 不然会无法使用

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': "ytshop",
            'USER': 'root',
            'PASSWORD': "123456",
            'HOST': "127.0.0.1",
            'OPTIONS': {'init_command': 'SET storage_engine=INNODB;'}
        }
    }

    迁移数据表

    此组件是带有数据表的, 因此需要进行数据库迁移,直接进行 migrate 即可, 源码中自带了 migrations 

    ./manage.py migrate

     迁移成功

    增加了5张表

    配置认证方式

    在 settings.py 中配置第三方认证方式

    social_core.backends 中涵盖了全世界的主流的平台, 包括知乎豆瓣等

    AUTHENTICATION_BACKENDS = ('social_core.backends.weibo.WeiboOAuth2',   # 微博
        'social_core.backends.weixin.WeixinOAuth2',  # 微信
        'social_core.backends.qq.QQOAuth2',      # qq
    
        'django.contrib.auth.backends.ModelBackend',
    
    )

    配置 接口

    urlpatterns = patterns('',
        ...
        url('', include('social_django.urls', namespace='social'))
        ...
    )

    配置模板

    TEMPLATES = [
        {
            ...
            'OPTIONS': {
                ...
                'context_processors': [
                    ...
                    'social_django.context_processors.backends',
                    'social_django.context_processors.login_redirect',
                    ...
                ]
            }
        }
    ]

    配置第三方平台相关参数

    SOCIAL_AUTH_TWITTER_KEY = 'foobar'
    SOCIAL_AUTH_TWITTER_SECRET = 'bazqux'

    配置参数需要进行更改, TWITTER 改成对应平台的大写

    以微博为例 需要输入 key 以及 Secret

    SOCIAL_AUTH_WEIBO_KEY = '34XXXXX2804'
    SOCIAL_AUTH_WEIBO_SECRET = '836c9d55a88XXXX77c8c31bd1'

    配置登录成功回调路径

    # 第三方登录后自动跳转
    SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

    rest-framework 时特殊配置

    django 和  rest-framework  的登录流程有所不同, 

     social-auth-app-django 对 django 的兼容性更好一些,但是对DRF 有所不同

    需要进行一定程度的处理, 存放进去用户以及相关的 token

    修改位置

    需要做手脚的是下图中的部分

     

    最后返回的时候将此代码进行更改为下面的代码

     # return backend.strategy.redirect(url)

    修改代码

    from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler
        payload = jwt_payload_handler(user)
        reponse = backend.strategy.redirect(url)
        reponse.set_cookie("name", user.name if user.name else user.username, max_age=24 * 3600)
        reponse.set_cookie("token", jwt_encode_handler(payload), max_age=24 * 3600)
        return reponse
  • 相关阅读:
    【OS_Windows】用微pe制作启动盘安装操作系统
    技术列表
    RPC 的概念模型与实现解析
    asp.net站点阻止某个文件夹或者文件被浏览器访问
    常用插件
    安全相关
    asp.net mvc 请求处理流程,记录一下。
    接口的显示实现和隐式实现
    值类型与引用类型的简单测试,没有太多的理论,一目了然。
    IEnumerable、GetEnumerator、IEnumerator之间的关系。
  • 原文地址:https://www.cnblogs.com/shijieli/p/10787203.html
Copyright © 2011-2022 走看看