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 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
python绘制直线的方法
Jun 30 Python
python爬取哈尔滨天气信息
Jul 14 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
如何使用Python标准库进行性能测试
Jun 25 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
python 内置函数汇总详解
Sep 16 Python
Django权限设置及验证方式
May 13 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
在线增减.htpasswd内的用户
2006/10/09 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
js实现简单模态框实例
2018/11/16 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
一个超级简单的python web程序
2014/09/11 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
python如何进入交互模式
2020/07/06 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
英语专业毕业生自荐信范文
2013/12/31 职场文书
办公室经理岗位职责
2014/01/01 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
社区工作者先进事迹
2014/01/18 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers