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针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python 操作hive pyhs2方式
Dec 21 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
python代数式括号有效性检验示例代码
Oct 04 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 Python
golang特有程序结构入门教程
Jun 02 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
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
jQuery实现弹幕特效
2019/11/29 jQuery
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
OpenCV 边缘检测
2019/07/10 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
python中web框架的自定义创建
2019/09/08 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
台湾三立电视电商平台:电电购
2019/09/09 全球购物
党组织公开承诺书
2014/03/29 职场文书
生物工程专业求职信
2014/09/03 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
教师个人考察材料
2014/12/16 职场文书
python关于集合的知识案例详解
2021/05/30 Python
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏