• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共46篇

    python3.X - Web - Flask1.1.1

关闭

返回栏目

关闭

返回python3.X - Web - Flask1.1.1栏目

43 - Flask - 加上微信登陆 - 回调

作者:

贺及楼

成为作者

更新日期:2021-11-07 11:20:50

Flask - 加上微信登陆 - 回调

login.html扫码操作后到/session路由

  1. #微信登陆+设置session
  2. @Wechat.route("/session")
  3. def update_session():
  4. #1.拿code
  5. code = request.args.get("code")
  6. if not code:
  7. return "ERR_INVALID_CODE", 400
  8. next = request.args.get("next", "/")
  9. #2.向微信服务器发送https请求,获取access_token
  10. 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)
  11. #发送请求,只传url说明用post
  12. response1 = urllib.request.urlopen(url1)
  13. #获取响应数据,微信返回的json数据
  14. json_str1 = response1.read()
  15. respond_dict1 = json.loads(json_str1)
  16. #json提取access_token
  17. if "errcode" in respond_dict1:
  18. return "获取access_token失败"
  19. access_token = respond_dict1.get("access_token")#access_token
  20. open_id = respond_dict1.get("openid")#用户所有微信开发平台编号
  21. #3.向微信服务器发送https请求,获取用户资料
  22. url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=¥s&openid=¥s&lang=zh_CN"¥(access_token,open_id)
  23. response2 = urllib.request.urlopen(url2)
  24. #获取响应数据,微信返回的json数据
  25. user_json_str = response2.read()
  26. user_respond_dict = json.loads(user_json_str)
  27. #json提取access_token
  28. if "errcode" in user_respond_dict:
  29. return "获取用户信息失败"
  30. else:
  31. #用户数据:
  32. openid = user_respond_dict.get("openid")#用户单个微信开发平台编号
  33. unionid = user_respond_dict.get("unionid")#用户所有微信开发平台编号
  34. nickname = user_respond_dict.get("nickname")#用户名字
  35. sex = user_respond_dict.get("sex")#用户性别12
  36. province = user_respond_dict.get("province")#用户省份
  37. city = user_respond_dict.get("city")#用户城市
  38. country = user_respond_dict.get("country")#用户国家
  39. headimgurl = user_respond_dict.get("headimgurl")#用户头像
  40. #设置session("unionid",unionid)
  41. session["unionid"] = unionid
  42. #设置session("openid",openid)
  43. session["openid"] = openid
  44. #设置session("nickname",nickname)
  45. session["nickname"] = nickname
  46. #设置session("headimgurl",headimgurl)
  47. session["headimgurl"] = headimgurl
  48. #从浏览器拿state
  49. state = request.args.get("state")
  50. #设置session("state",state)
  51. session["state"] = state
  52. #开启session时间限制
  53. session.permanent = True
  54. # print(openid,unionid,nickname,sex,province,city,country,headimgurl)
  55. try:
  56. #查询数据库的Wechatdatabase表,看有没有这个id(数据表的名字=这里的unionid)
  57. wechatdata = Wechatdatabase.query.filter_by(unionid=unionid).first()
  58. #如果有就过了
  59. if wechatdata:
  60. wechatdata.nickname = nickname
  61. wechatdata.province = province
  62. wechatdata.city = city
  63. wechatdata.country =country
  64. # 提交操作到数据库
  65. db.session.commit()
  66. #如果没有就新增
  67. else:
  68. try:
  69. #新id进来 = 数据库名(数据库表列1名=啥名,数据库表列2名=啥东西)
  70. #new_wechat_id = Wechatdatabase(openid=openid,sex=sex,province=province,city=city,country=country,unionid=unionid,points=50)
  71. new_wechat_id = Wechatdatabase(openid=openid,nickname=nickname,sex=sex,province=province,city=city,country=country,unionid=unionid)
  72. db.session.add(new_wechat_id)
  73. db.session.commit()
  74. except Exception as e:
  75. print(e)
  76. flash("添加id失败!")
  77. db.session.rollback()
  78. except:
  79. pass
  80. return redirect(url_for("A.index"))

最后一句return redirect(url_for(‘A.index’))
意思是返回主页的方法
A是Flask蓝图名字
index是def index():方法

¥要改回来百分号