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 23 Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
Django基础之Model操作步骤(介绍)
May 27 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
scrapy爬虫完整实例
Jan 25 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
Python文件读写常见用法总结
Feb 22 Python
python动态进度条的实现代码
Jul 03 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Python爬虫之爬取某文库文档数据
Apr 21 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怎样调用MSSQL的存储过程
2006/10/09 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
js可突破windows弹退效果代码
2008/08/09 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Python中的单继承与多继承实例分析
2018/05/10 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
高中信息技术教学反思
2016/02/16 职场文书
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android