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中title()方法的使用简介
May 20 Python
常见python正则用法的简单实例
Jun 21 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Python 支付整合开发包的实现
Jan 23 Python
详解python-图像处理(映射变换)
Mar 22 Python
python zip()函数使用方法解析
Oct 31 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
Python requests模块安装及使用教程图解
Jun 30 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
python 如何读、写、解析CSV文件
Mar 03 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
js计算德州扑克牌面值的方法
2015/03/04 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
python实现图片筛选程序
2018/10/24 Python
详解python解压压缩包的五种方法
2019/07/05 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
美国网上花店:JustFlowers
2017/02/12 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
大学生就业自荐信
2013/10/26 职场文书
大一新生学期自我评价
2014/04/09 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
幼儿园运动会口号
2014/06/07 职场文书
文秘应届生求职信
2014/07/05 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
解除租赁合同协议书
2016/03/21 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
Java 死锁解决方案
2022/05/11 Java/Android