django接入新浪微博OAuth的方法


Posted in Python onJune 29, 2015

本文实例讲述了django接入新浪微博OAuth的方法。分享给大家供大家参考。具体分析如下:

最近将网站和新浪微博进行了整合,思路很简单,就是将页面内容和新浪微博联系起来,一个独立内容的页面对于一条微博,自然评论系统只需要使用微博的评论即可。 然后,用户需要发表评论的话,肯定要接入oauth,不可能让用户登录你的网站来发评论吧?没有谁会将自己的账号和密码告诉你的。 查看了新浪微博的授权机制,然后下载了python版的sdk,就可以在django上接入oauth了。

对于oauth很陌生的同学,请先查看OAUTH协议简介

其实流程很简单:

① getrequesttoken ->
② createauthurl ->
③ [user_login: 跳转到新浪登录页面,用户登陆后会跳转回来] ->
④ getaccesstoken ->
⑤ done!

在django上结合python版的sdk的具体实现代码,已经有很详细的注释了:

oauth_views.py文件如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
基于django的新浪微博oauth views
需要django的session支持
"""
from django.http import HttpResponseRedirect
from weibopy import OAuthHandler, oauth, WeibopError
consumer_key = '' # 设置你申请的appkey
consumer_secret = '' # 设置你申请的appkey对于的secret
class WebOAuthHandler(OAuthHandler):
  def get_authorization_url_with_callback(self, callback, signin_with_twitter=False):
    """Get the authorization URL to redirect the user"""
    try:
      # get the request token
      self.request_token = self._get_request_token()
      # build auth request and return as url
      if signin_with_twitter:
        url = self._get_oauth_url('authenticate')
      else:
        url = self._get_oauth_url('authorize')
      request = oauth.OAuthRequest.from_token_and_callback(
        token=self.request_token, callback=callback, http_url=url
      )
      return request.to_url()
    except Exception, e:
      raise WeibopError(e)
def _get_referer_url(request):
  referer_url = request.META.get('HTTP_REFERER', '/')
  host = request.META['HTTP_HOST']
  if referer_url.startswith('http') and host not in referer_url:
    referer_url = '/' # 避免外站直接跳到登录页而发生跳转错误
  return referer_url
def _oauth():
  """获取oauth认证类"""
  return WebOAuthHandler(consumer_key, consumer_secret)
def login(request):
  # 保存最初的登录url,以便认证成功后跳转回来
  back_to_url = _get_referer_url(request)
  request.session['login_back_to_url'] = back_to_url
  # 获取oauth认证url
  login_backurl = request.build_absolute_uri('/login_check')
  auth_client = _oauth()
  auth_url = auth_client.get_authorization_url_with_callback(login_backurl)
  # 保存request_token,用户登录后需要使用它来获取access_token
  request.session['oauth_request_token'] = auth_client.request_token
  # 跳转到登录页面
  return HttpResponseRedirect(auth_url)
def login_check(request):
  """用户成功登录授权后,会回调此方法,获取access_token,完成授权"""
  # http://mk2.com/?oauth_token=c30fa6d693ae9c23dd0982dae6a1c5f9&oauth_verifier=603896
  verifier = request.GET.get('oauth_verifier', None)
  auth_client = _oauth()
  # 设置之前保存在session的request_token
  request_token = request.session['oauth_request_token']
  del request.session['oauth_request_token']
  auth_client.set_request_token(request_token.key, request_token.secret)
  access_token = auth_client.get_access_token(verifier)
  # 保存access_token,以后访问只需使用access_token即可
  request.session['oauth_access_token'] = access_token
  # 跳转回最初登录前的页面
  back_to_url = request.session.get('login_back_to_url', '/')
  return HttpResponseRedirect(back_to_url)
def logout(request):
  """用户登出,直接删除access_token"""
  del request.session['oauth_access_token']
  back_to_url = _get_referer_url(request)
  return HttpResponseRedirect(back_to_url)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python实现批量下载文件
May 17 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
在centos7中分布式部署pyspider
May 03 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
pycharm 安装JPype的教程
Aug 08 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 Python
python链接Oracle数据库的方法
Jun 28 #Python
python写日志封装类实例
Jun 28 #Python
Python实现的简单hangman游戏实例
Jun 28 #Python
python实现矩阵乘法的方法
Jun 28 #Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 #Python
python实现简单ftp客户端的方法
Jun 28 #Python
基于进程内通讯的python聊天室实现方法
Jun 28 #Python
You might like
PHP+ajax 无刷新删除数据
2010/02/20 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
PHP对象实例化单例方法
2017/01/19 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
Python 模拟登陆的两种实现方法
2017/08/10 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
Python3列表List入门知识附实例
2020/02/09 Python
python实现ping命令小程序
2020/12/28 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
软件工程专业推荐信
2013/10/28 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
纠风工作实施方案
2014/03/15 职场文书
护士节策划方案
2014/05/19 职场文书
公司年终奖分配方案
2014/06/16 职场文书
房租涨价通知
2015/04/23 职场文书
2015年档案室工作总结
2015/05/23 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA