介绍
这篇文章主要介绍了python如何实现微信小程序用户登录,模板推送,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<强> python实现微信小程序的用户登录强>
小程序可以通过官方提供的登录邓丽来获取用户身份的标示,具体文档可以参考官方文档,通过流程时序可以看的到,对于需要和前端配合的服务端开发,主要实现的就是通过小程序提供的代码换取用户的openid和session_key,并用换取到的openid和secret_key作为自定义的登录态。分析后得知,作为小程序后端的开发,主要实现以下几部分内容:
- <李>
提供一个HTTP接口,供小程序方使用,传递代码;
李> <李>换取用户身份标识;
李> <李>维护一个自定义的登录态;
李> <李>需要存储用户的openid,以备后续使用。
1。提供给小程序一个HTTP接口,接口而使用龙卷风框架
简化阐述,代码没有做异常处理
class LoginHandler (RequestHandler): 帖子,def (自我):=,,req_data  json.loads (self.request.body)=,,js_code  req_data.get (& # 39; js_code& # 39;) , ,#开始换取用户的信息=,,user_info  get_user_info (js_code=js_code)=,,openid  user_info [& # 39; openid # 39;】=,,session_key  user_info [& # 39; session_key& # 39;】=,,user_uuid  str (uuid.uuid4()), #,暴露给小程序端的用户标示 , ,#用来维护用户的登录态 ,User.save_user_session ( ,,user_uuid=user_uuid, ,,openid=openid, ,,session_key=session_key ,) , ,#微信小程序不能设置饼干,,把用户信心存在了头中 ,self.set_header(& # 39;授权# 39;,,user_uuid) ,#存储用户信息 ,User.save_user_info (open_id=openid) 之前,self.set_status (204) >2。换取用户身份标示,直接使用请求包请求微信的相关接口,获取数据
def get_user_info (js_code): ,req_params =, { ,“appid": & # 39; app_id # 39;,, #,小程序ID ,“secret": & # 39;秘密# 39;,,#,小程序,秘密 ,“js_code": js_code, ,“grant_type": & # 39; authorization_code& # 39; }大敌;=,,req_resutl  requests.get (& # 39; https://api.weixin.qq.com/sns/jscode2session& # 39;,, params=req_params,超时=3,,验证=False) 以前,return req_result.json () >3。维护一个自定义的登录态,使用复述,
user_redis =, StrictRedis.from_url(& # 39;复述,//localhost: 6379 & # 39;) class 用户(对象): ,REDIS_EXPIRES =, 7, *, 24, *, 60, * 60 , ,@classmethod ,def save_user_session (cls, user_uuid,, openid,, session_key): ,user_session_value =, { ,& # 39;openid # 39;: openid, ,& # 39;session_key& # 39;: session_key ,}=,user_session_key & # 39;我们:& # 39;,+ user_uuid ,with user_redis.pipeline(事务=False), as 管: ,pipe.hmset (user_session_key, user_session_value) ,pipe.expire (user_session_key, cls.REDIS_EXPIRES) 之前,pipe.execute () >4。存储用户信息,以备后用,ORM使用SQLAlchemy
得到sqlalchemy import create_engine 得到sqlalchemy.ext.declarative import  declarative_base #,mysql 相关设置 时间=engine create_engine (& # 39; mysql://根:pwd@localhost/wechat& # 39;) 时间=conn engine.connect () 时间=Base declarative_base () Base.metadata.reflect(引擎) tables =Base.metadata.tables class 用户(对象):=,table 表[& # 39;用户# 39;】 ,@classmethod ,def save_user_info (cls, open_id): ,#存储用户信心=,,sql  cls.table.insert () . values (open_id=open_id) 之前,conn.execute (sql) >sql语句
CREATE TABLE “用户”( ,“id”int (20), unsigned NOT NULL AUTO_INCREMENT, ,‘open_id varchar (32), NOT NULL COMMENT & # 39;用户,open_id& # 39; ,‘created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT & # 39;创建时间& # 39;, ,‘updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP 提醒UPDATE CURRENT_TIMESTAMP COMMENT & # 39;更新时间& # 39;, ,PRIMARY KEY (id), ,KEY “idx_oid”, (“open_id”) ),引擎=InnoDB default CHARSET=utf8mb4;模板:通过代码发送微信模板消息
python如何实现微信小程序用户登录,模板推送