xml地图|网站地图|网站标签 [设为首页] [加入收藏]
新浪微博登录,居然有人打赏
分类:编程

C# 虹软SDK视频人脸识别和注册

  居然收到10元打赏,还不知道谁干的,其实更好(自认为)的demo在

截屏留念:

图片 1

当然,谢谢!谢谢鼓励!

新浪微博第三方登录使用的是OAuth2.0,开发前提已经注册开发者帐号,是开发者。

Django的路由系统

Django 1.11版本 URLConf官方文档

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。

你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

OAuth简介

OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。

URLconf配置

具体开发步骤

基本格式:

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]

注意:

Django 2.0版本中的路由系统已经替换成下面的写法(官方文档):

from django.urls import path

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

第一步:准备阶段

打开微博开发平台,并登录你的新浪微博账号。再点击导航上的“微链接”--> “网站接入”。
图片 2
图片 3
图片 4
创建完应用后再基本信息里就可以拿到App Key和App Secret。在开发阶段可以直接拿来使用,如果网站上线需要完善等级信息。
图片 5
图片 6
微博第三方登录的大体步骤:先跳转到用户登录界面,同意后回调到填写的回调页面,获得code码,通过code码获取access_token,其中包含用户的唯一表示uid。

参数说明:

  • 正则表达式:一个正则表达式字符串
  • views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
  • 参数:可选的要传递给视图函数的默认参数(字典形式)
  • 别名:一个可选的name参数

第一步:具体开发

图片 7

  • 创建web应用
    创建完成之后,打开models.py文件,编写模型:
class Users(models.Model):
    uid = models.CharField(max_length=64, null=True)  # 微博的关联uid
    nickname = models.CharField(max_length=30, null=True)  # 用户昵称
    head = models.CharField(max_length=100, null=True)  # 用户头像
    sex = models.CharField(max_length=2, null=True)  # 性别
    register_time = models.DateTimeField('保存日期')  # 注册时间
    register_ip = models.CharField(max_length=30, null=True)  # 注册ip
    last_time = models.DateTimeField('最后修改日期')  # 最后一次登录时间

模型用于存储微博登录返回的uid值。这个uid是与微博一一对应。
在总的urls路由中,加入对应应用路由。

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('login/', include('login.urls')),  # 登录模块
]

打开对应应用目录下urls.py文件,填写对用的路由:

from django.urls import path
from . import views

urlpatterns = [
    path('oauth/weibo/login', views.weibo_login),  # 微博授权页面
    path('weibo/connect/callback.php', views.weibo_get_code),  # 微博回调页面
]

oauth/weibo/login和weibo/connect/callback.php,分别是打开授权页面和回调地址。
大致步骤是授权之后,得到uid。判断这个uid是否存在数据库中。若存在,则直接登录对应的用户即可;若不存在,则获取调取获取用户信息的新浪接口,获取用户信息。

  • 开发登录模块
    1.在工程目录settings.py中设置常量
'''微博登录常量'''
WEIBO_APP_ID = "App Key"
WEIBO_APP_KEY = "App Secret"
WEIBO_REDIRECT_URI = "回调地址"

2.在对应应用的文件夹下创建wb_oauth.py文件,编辑wb_oauth.py文件:

import requests
import json


class OAuthWB:
    def __init__(self, client_id, client_key, redirect_uri):
        self.client_id = client_id
        self.client_key = client_key
        self.redirect_uri = redirect_uri

    def get_access_token(self, code):  # 获取用户token和uid
        url = "https://api.weibo.com/oauth2/access_token"

        querystring = {
            "client_id": self.client_id,
            "client_secret": self.client_key,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": self.redirect_uri
        }

        response = requests.request("POST", url, params=querystring)

        return json.loads(response.text)

    def get_user_info(self, access_token_data):
        url = "https://api.weibo.com/2/users/show.json"

        querystring = {
            "uid": access_token_data['uid'],
            "access_token": access_token_data['access_token']
        }

        response = requests.request("GET", url, params=querystring)

        return json.loads(response.text)

3.编辑对应应用的文件夹下views.py文件:

from .wb_oauth import OAuthWB
from django.conf import settings  # 引入常量
def weibo_login(request):# 跳转授权页面
    return HttpResponseRedirect(
        'https://api.weibo.com/oauth2/authorize?client_id=' + settings.WEIBO_APP_ID + '&redirect_uri=' + settings.WEIBO_REDIRECT_URI)


def weibo_get_code(request):
    """登录之后,会跳转到这里。需要判断code和state"""
    code = request.GET.get('code', None)
    sina = OAuthWB(settings.WEIBO_APP_ID,
                   settings.WEIBO_APP_KEY,
                   settings.WEIBO_REDIRECT_URI)
    user_info = sina.get_access_token(code)
    time.sleep(0.1)  # 防止还没请求到token就进行下一步
    # 通过uid查询出是否是新用户,新用户则注册登录
    is_user_exist = models.Users.objects.filter(uid=user_info['uid']).first()
    if is_user_exist is not None:
        # 存在直接登录
        pass
    else:
        #不存在获取用户信息
        new_user_info = sina.get_user_info(user_info)
        users_dict = {
            "uid": new_user_info['id'],
            'description': new_user_info['description'],
            "head": new_user_info['profile_image_url'],
            "nickname": new_user_info['name'],
        }
        users_table_obj = models.Users.objects.create(**users_dict).id   

注:获取邮箱地址的接口是属于高级权限,需要先通过审核,然后在我的应用中的接口管理中申请。新浪提供的API测试页面。

正则表达式详解

基本配置

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

注意事项

  1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
  2. 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
  3. 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
  4. 每个正则表达式前面的'r' 是可选的但是建议加上。

补充说明

# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项
APPEND_SLASH=True

Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。

其效果就是:

我们定义了urls.py:

from django.conf.urls import url
from app01 import views

urlpatterns = [
        url(r'^blog/$', views.blog),
]

访问 时,默认将网址自动转换为 。

如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 时就会提示找不到页面。

分组命名匹配

上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。

在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。

下面是以上URLconf 使用命名组的重写:

from django.conf.urls import url

from app01 import views

urlpatterns = [
    url(r'^articles/(?P<year>[0-9]{4})/$', views.blog),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/$', views.blog1),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/(?P<day>[0-9]{1,2})/$', views.blog2),
]

这个实现与前面的示例完全相同,只有一个细微的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。

例如,针对url /articles/2017/12/相当于按以下方式调用视图函数:

views.blog2(request, year="2018", month="08", day="14")

views使用命名组调用:

from django.shortcuts import render,redirect, HttpResponse

def blog(request, year):
    return HttpResponse("年:%s" % (year))

def blog1(request, year="2018", month="08"):
    return HttpResponse("年:%s ———— 月:%s" % (year, month))

def blog2(request, year="2018", month="08", day="14"):
    return HttpResponse("年:%s ———— 月:%s ———— 日:%s" %(year, month, day))

本文由澳门新葡亰手机版发布于编程,转载请注明出处:新浪微博登录,居然有人打赏

上一篇:没有了 下一篇:numpy的axis的理解和检验
猜你喜欢
热门排行
精彩图文