#微信登陆+设置session
@Wechat.route("/session")
def update_session():
#1.拿code
code = request.args.get("code")
if not code:
return "ERR_INVALID_CODE", 400
next = request.args.get("next", "/")
#2.向微信服务器发送https请求,获取access_token
url1 = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=¥s&secret=¥s&code=¥s&grant_type=authorization_code" ¥(app_id,app_secret,code)
#发送请求,只传url说明用post
response1 = urllib.request.urlopen(url1)
#获取响应数据,微信返回的json数据
json_str1 = response1.read()
respond_dict1 = json.loads(json_str1)
#json提取access_token
if "errcode" in respond_dict1:
return "获取access_token失败"
access_token = respond_dict1.get("access_token")#access_token
open_id = respond_dict1.get("openid")#用户所有微信开发平台编号
#3.向微信服务器发送https请求,获取用户资料
url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=¥s&openid=¥s&lang=zh_CN"¥(access_token,open_id)
response2 = urllib.request.urlopen(url2)
#获取响应数据,微信返回的json数据
user_json_str = response2.read()
user_respond_dict = json.loads(user_json_str)
#json提取access_token
if "errcode" in user_respond_dict:
return "获取用户信息失败"
else:
#用户数据:
openid = user_respond_dict.get("openid")#用户单个微信开发平台编号
unionid = user_respond_dict.get("unionid")#用户所有微信开发平台编号
nickname = user_respond_dict.get("nickname")#用户名字
sex = user_respond_dict.get("sex")#用户性别1男2女
province = user_respond_dict.get("province")#用户省份
city = user_respond_dict.get("city")#用户城市
country = user_respond_dict.get("country")#用户国家
headimgurl = user_respond_dict.get("headimgurl")#用户头像
#设置session("unionid",unionid)
session["unionid"] = unionid
#设置session("openid",openid)
session["openid"] = openid
#设置session("nickname",nickname)
session["nickname"] = nickname
#设置session("headimgurl",headimgurl)
session["headimgurl"] = headimgurl
#从浏览器拿state
state = request.args.get("state")
#设置session("state",state)
session["state"] = state
#开启session时间限制
session.permanent = True
# print(openid,unionid,nickname,sex,province,city,country,headimgurl)
try:
#查询数据库的Wechatdatabase表,看有没有这个id(数据表的名字=这里的unionid)
wechatdata = Wechatdatabase.query.filter_by(unionid=unionid).first()
#如果有就过了
if wechatdata:
wechatdata.nickname = nickname
wechatdata.province = province
wechatdata.city = city
wechatdata.country =country
# 提交操作到数据库
db.session.commit()
#如果没有就新增
else:
try:
#新id进来 = 数据库名(数据库表列1名=啥名,数据库表列2名=啥东西)
#new_wechat_id = Wechatdatabase(openid=openid,sex=sex,province=province,city=city,country=country,unionid=unionid,points=50)
new_wechat_id = Wechatdatabase(openid=openid,nickname=nickname,sex=sex,province=province,city=city,country=country,unionid=unionid)
db.session.add(new_wechat_id)
db.session.commit()
except Exception as e:
print(e)
flash("添加id失败!")
db.session.rollback()
except:
pass
return redirect(url_for("A.index"))
最后一句return redirect(url_for(‘A.index’))
意思是返回主页的方法
A是Flask蓝图名字
index是def index():方法
¥要改回来百分号