token

flask开发restful api系列(1)

放肆的年华 提交于 2020-01-28 18:39:43
  在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis。如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉,我建议先到这个网站简单学习一下,非常非常简单。http://dormousehole.readthedocs.org/en/latest/   一直想写一些特别的东西,能让大家学习讨论的东西。但目前网上的很多博客,老么就按照官方文档照本宣读,要么直接搬代码,什么都不说明。我写这个系列的博客,让大家由浅入深,一步一步走向复杂结构,以及为啥要这么走,其他方式可不可以等等。   目前看来,移动开发最火,而我们python最适合开发移动的就是flask web框架,这款web框架非常清晰,可以简单用,可以复杂用。最简单的时候,一个py文件,就可以做一个项目;复杂的时候,利用蓝图,做各种版本控制,代码结构自己完全控制,非常自由。   首先,我们要知道,目前我们移动开发基本都在用restful api,什么是restful api呢?百度百科一下:Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外

Java实现微信网页授权

不问归期 提交于 2020-01-28 15:12:03
微信测试平台 : https://open.weixin.qq.com/connect/qrconnect?appid=wx39c379788eb1286a&scope=snsapi_login&redirect_uri=http%3A%2F%2Fmp.weixin.qq.com%2Fdebug%2Fcgi-bin%2Fsandbox%3Ft%3Dsandbox%2Flogin 开发前的准备: 1、需要有一个公众号(我这里用的测试号),拿到AppID和AppSecret; 2、进入公众号开发者中心页配置授权回调域名。具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本信息-修改 注意,这里仅需填写全域名(如www.qq.com、www.baidu.com),勿加 http:// 等协议头及具体的地址字段;   我们可以通过使用Ngrok来虚拟一个域名映射到本地开发环境,网址https://www.ngrok.cc/,大家自己去下载学习怎么使用 同时还需要扫一下这个二维码 授权步骤: 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、通过网页授权access_token和openid获取用户基本信息 先看一下我的项目结构: web.xml相关代码: <?xml version

常见六大Web安全攻防解析

大兔子大兔子 提交于 2020-01-28 12:49:55
转自:https://www.cnblogs.com/fundebug/p/details-about-6-web-security.html 一、XSS XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和CSS重叠,所以只能叫XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击 跨站脚本攻击有可能造成以下影响: 利用虚假输入表单骗取用户个人信息 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求 显示伪造的文章或图片 XSS的原理是恶意攻击者往Web页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的 XSS的攻击方式千变万化,但还是可以大致细分为几种类型 1.非持久型XSS(反射型XSS) 非持久型XSS漏洞,一般是通过给别人发送 带有恶意脚本代码参数的URL ,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行 举一个例子,比如页面中包含有以下代码: <select> <script> document.write('' + '<option value=1>' + location.href.substring(location

Jmeter脚本调试——关联(正则表达式)

左心房为你撑大大i 提交于 2020-01-28 07:56:05
关联,在脚本中,是必应用到的一个设置方法,将脚本中,每次都会动态变化的特殊值进行关联。一个能正确执行的脚本,都需要进行关联(LR、jmeter)。 Jmeter关联: 在脚本回放过程中,客户端发出请求,通过Jmeter中的正则表达式提取器所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法称作关联。通俗点说,就是把脚本中某些写死的(hard-coded)数据,转变成撷取自服务器所送的、动态的、每次都不一样的数据。 关联分两种,提取单个字符串和多个字符串。 先添加正则表达式提取器,如下所示: 正则表达式提取器: 允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。 提取单个字符串 假如想匹配Web页面的如下部分:name="csrf_token" value="d574d4d2c0b9f499"/>并提取d574d4d2c0b9f499。 提取该值,正则表达式写为:name="csrf_token" value="(.+?)"/>。 将脚本中的相应值改为如下所示即可: 可在正则下添加一个取样器,如下所示,可以清楚看到正则提取出来的值 运行脚本

Django之路——9 Django的form组件的信息校验

给你一囗甜甜゛ 提交于 2020-01-28 06:31:19
forms组件 校验字段功能 针对一个实例:注册用户讲解。 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 模板: register.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> {% csrf_token %} <div> <label for="user">用户名</label> <p><input type="text" name="name" id="name"></p> </div> <div> <label for="pwd">密码</label> <p><input type="password" name="pwd" id="pwd"></p> </div> <div> <label for="r_pwd">确认密码</label> <p>

微信小程序获取用户手机号码(后台jsp、java版)

心不动则不痛 提交于 2020-01-28 05:10:29
微信小程序获取用户手机号码(后台jsp、java版) 前端微信小程序获取code,后台使用jsp、java获取session_key和openid;然后结合iv和encryptedData解密出微信用户手机号码 【效果图】 【开发流程】 第1步:wx.login获取code 第2步:传递code到服务器,获取session_key和openid 第3步:参考官方文档getPhoneNumber,获取iv和encryptedData 第4步:解密返回数据,获取手机号码 【第1步:wx.login获取code】 调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid 和 session_key 等信息 【第2步:传递code到服务器,获取session_key和openid】 官方文档地址 https://developers.weixin.qq.com/miniprogram/dev/api

oauth authorization api

一世执手 提交于 2020-01-28 04:50:45
授权链接为 api.xxxx.cm/oauth/authorization grant_type:授权方式,可选值“password”和“refresh_token”,password表示使用账号密码获得授权(会返回access_token和refresh_token),refresh_token表示通过refresh_token获得授权(会返回access_token) 第一次访问grant_type=password&username=xxx&password=xxx 得到access_token和refresh_token 以后访问其他资源带上access_token 如果遇到access_token,就使用grant_type=refresh_token&refresh_token=xxx 来刷新access_token并返回access_token 改进:无痛自动刷新access_token 遇到access_token过期,后端自动刷新access_token,最后返回你要请求的资源和刷新后的access_token 来源: CSDN 作者: buyue__ 链接: https://blog.csdn.net/buyueliuying/article/details/103751091

axios uc浏览器跨域请求失败

爱⌒轻易说出口 提交于 2020-01-28 04:37:16
前端报错为:headers 报错Request header field Content-Type is not allowed by Access-Control-Allow-Headers 解决方法:后端的CORS过滤器中需要将response.setHeader(“Access-Control-Request-Headers”,"*"); 改成 response.setHeader(“Access-Control-Allow-Headers”, “Origin, X-Requested-With, Content-Type, Accept,token,Access-Token”); response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Max-Age", "1728000"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("content-type","text/html;charset=UTF-8");

java微信接口之——获取access_token

♀尐吖头ヾ 提交于 2020-01-28 03:51:15
一、微信获取access_token接口简介   1、请求:该请求是GET方式请求,所以要携带的参数都是附加到url后面传递给微信服务器。请求的url格式如下:     https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET     其中,APPID与APPSECRET都我们开发的时候自己帐号申请的。   2、响应:返回数据都是json数据,格式如下:    正确的时候返回的数据: {"access_token":"ACCESS_TOKEN","expires_in":7200}      ACCESS_TOKEN:访问token,expires_in为过期时间    错误的时候返回的数据: {"errcode":40013,"errmsg":"invalid appid"}      errcode,为错误代码,errmsg为错误信息    具体api说明可查看文档: http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96access_token 。 二、关于java代码的调用   该接口可以在前台用页面ajax调用,也可以在后台用java代码调用

Django REST framework

五迷三道 提交于 2020-01-27 17:24:36
一、起步 由于笔者水平有限,学习技术官方文档永远是首先被推荐的,推荐来自Django REST framework官网的 快速教程 二、序列化组件 models: 后面的代码将基于这几个表来做操作 1 class BookDetailView(APIView): 2 """ 3 针对单条数据的序列化 4 """ 5 6 def get(self,request,id): 7 8 book=Book.objects.filter(pk=id).first() 9 bs=BookModelSerializers(book,context={'request': request}) 10 return Response(bs.data) 11 12 def put(self,request,id): 13 book=Book.objects.filter(pk=id).first() 14 bs=BookModelSerializers(book,data=request.data) 15 if bs.is_valid(): 16 bs.save() 17 return Response(bs.data) 18 else: 19 return Response(bs.errors) 20 21 def delete(self,request,id): 22 Book.objects