Flask用法:
Flask框架是用python语言编写的一款小而精的web开发框架,本次web微信的开发用的此框架。
http方法:
如果需要处理具体的HTTP方法,一般使用route
装饰器的methods
参数设置即可。
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method =='GET':
ctime = str(int(time.time() * 1000))
qcode_url = 'https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&' \
'redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&' \
'fun=new&lang=zh_CN&_={}'.format(ctime)
ret = requests.get(qcode_url)
qcode = re.findall(r'uuid = "(.*)"', ret.text)[0]
# 把qcode放入session中
session['qcode'] = qcode
return render_template('login.html',qcode=qcode)
模板生成
from flask import render_template @app.route('/login') def hello(data=None): return render_template('login.html', data=data)
Cookies
Flask也可以方便的处理Cookie。使用方法很简单
@app.route("/get_cookie") def get_cookie(): cookie = request.cookies.get("cookiesparmas") print "cookiesparmas={}".format(cookie)
Session
我们可以使用全局对象session
来管理用户会话。Sesison 是建立在 Cookie 技术上的,不过在 Flask 中,我们还可以为 Session 指定密钥,这样存储在 Cookie 中的信息就会被加密,从而更加安全。
from flask import Flask, request, render_template, session, jsonify @app.route('/check_login') def check_login(): """ 发送get请求,监测是否已经扫码登录 https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=IY0kPdDpYQ==&tip=1&r=-1884082220&_=1530892439246 https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=gaQ_y7CT7Q==&tip=0&r=-2021270580&_=1531029500119 :return: """ # 在这里就可以获取qcode了 response = {'code': 408} qcode = session.get('qcode') ctime = str(int(time.time() * 1000)) check_url = 'https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid={}&tip=0&r=-2021270580&_={}'.format(qcode, ctime) ret = requests.get(check_url,headers = headers) if 'code=201' in ret.text: # 扫码成功 src = re.findall("userAvatar = '(.*)';", ret.text)[0] # print(src) # 获取到用户的头像地址 response['code'] = 201 response['src'] = src elif 'code=200' in ret.text: # 登录 redirect_uri = re.findall(r'redirect_uri="(.*)"', ret.text)[0] # print(redirect_uri) # 向redirect_uri发送请求,返回需要的参数 # redirect_uri= redirect_uri + " " redirect_uri = redirect_uri + '&fun=new&version=v2&lang=zh_CN' ticket_ret = requests.get(redirect_uri, headers=headers) ticket_dict = xml_parser(ticket_ret.text) # 存储凭证到字典中 session['ticket_dict'] = ticket_dict # 存储这次请求的cookie session['ticket_cookie'] = ticket_ret.cookies.get_dict() response['code'] = 200 return jsonify(response)
轮询与长轮询
轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
长轮询:客户端向服务器发送Ajax请求,服务器接到请求后夯住连接,直到有新消息才返回响应信息。
后记
sql面试题:
-引擎:
innodb:支持事务操作,
-支持表锁/行锁,
-表锁:select * from tb for update;
-行锁:
select id,name from tb where id =2 for update;
用于多线程,相当于只能一个线程操作
myisam:支持全文索引,快,表锁
-表锁:
加锁语句,锁住整张表 select * from tb for update;
-设计表
-FK
-M2M 多对多
-查询表中的数据
-概念:
-触发器
-函数
-聚合:max/sum/min/avg
-时间格式化 date_format
-字符串拼接 concat
-存储过程
以上内容都是保存在数据库中
-索引: 索引的目的,加速查找,但是更新慢一些
单列:
b+索引
哈希索引(字典)适合都不重复的数据
-普通索引:index 只能加速查找
-唯一索引:unique 加速查找+约束,不能重复
- 主键:primay key 加速查找+约束,不能重复 + 不能为空
多列:
-联合索引:多列创建索引
-联合唯一索引:
ps:遵循最左前缀的规则
其他词语:
-索引合并,多个单列索引查询
-覆盖索引,在索引表中就能将想要的数据查询到
-创建了索引,应该如何命中索引?哪种情况下,创建了无法命中
www.cnbolgs.com/wupeiqi/articles/5716963.html
-开启慢日志查询?
-执行计划
explain select * from tb;
看这条语句的级别
select_type type all(全表扫描,很慢)
index(全表索引扫描,慢)
-导入导出
-数据库分页(类似于网站分页)
select * from tb limit 3 offset 5
models.User.objects.all()[0:10]
记录当前页 数据ID最大值和最小值
在翻页时,根据条件先进行筛选,筛选完毕之后,根据limit offset查询
2.requests参数回顾
img是不能定制请求头的 headers里的referer和host可以是防盗链