V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
waffur
V2EX  ›  Python

有搞微信开发的吗?请教一个问题

  •  
  •   waffur · 2018-08-18 17:50:26 +08:00 · 3639 次点击
    这是一个创建于 2049 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求:
    根据用户的两次回复情况作出特定的回复。例如用户两次分别发送信息“ 1 ”和“ 2 ”,然后服务器求和返回“ 3 ”。
    问题:
    如何储存第一次的用户发送过来的信息?
    看了不少零零散散的教程,有提到说用缓存。因自己是用 Flask 为主,于是参考了第三方库 flask-cache 和 redis。但还是有点模糊,不明白它们在其中分别作为什么角色呢。
    有没有前辈能提供一点思路,小弟不胜感激。
    20 条回复    2018-08-19 22:27:16 +08:00
    shoaly
        1
    shoaly  
       2018-08-18 18:44:03 +08:00
    这不是微信相关的, 是 session 去处理的....
    bombless
        2
    bombless  
       2018-08-18 19:03:02 +08:00 via Android
    存哪无所谓,可以存文件里
    看要不要区分用户,区分的话可以一个 openid 对应一个文件
    notedown
        3
    notedown  
       2018-08-18 20:53:20 +08:00
    redis 咯.
    检测是活动关键字 触发..存起来... hset quaere:001 openid:xxxxxx {用户填写的内容一些东西 obj to string}
    主要是看你的活动流程.而不是怎么储存
    opengps
        4
    opengps  
       2018-08-18 20:58:13 +08:00 via Android
    微信的一问一答不太适合你的需求,硬要做也行
    首先,你得有记录,
    然后,你得有办法识别。某个计算之前多少条信息参与计算
    hlwjia
        5
    hlwjia  
       2018-08-18 21:07:28 +08:00
    楼主,你先说说你会什么吧
    waffur
        6
    waffur  
    OP
       2018-08-18 23:42:15 +08:00
    @shoaly 好吧,只是现在我在微信场景下要解决这个问题。以为有特定的解决方式....
    waffur
        7
    waffur  
    OP
       2018-08-18 23:48:08 +08:00
    @hlwjia 就是不会的太多思路受限,如果能提点下一般解决方法就能专项补习啦。
    waffur
        8
    waffur  
    OP
       2018-08-18 23:50:05 +08:00
    @bombless
    @notedown
    @opengps 感谢指点~~
    InternetExplorer
        9
    InternetExplorer  
       2018-08-19 00:01:04 +08:00
    你想哈,有个叫 session 的东西,自带过期时间,每个用户一个,微信服务器发请求过来的时候,获取来源用户的 session,然后根据 session 来还原出 之前的环境,然后进行操作。
    zhjits
        10
    zhjits  
       2018-08-19 00:15:05 +08:00
    写一个状态机,给每个 user id 存储当前状态
    hlwjia
        11
    hlwjia  
       2018-08-19 00:46:29 +08:00
    @waffur 先存数据库吧,最简单的了
    eb22fbb4
        12
    eb22fbb4  
       2018-08-19 01:31:15 +08:00
    问题的核心不在于存储,数据库、文件、缓存什么的可以,重要的是区分两次消息是否来自同一个人,服务端接收到消息里会包含用户 OpenID,用 OpenID 作为区分用户的唯一标识,把消息内容每次都存起来(只存两条也可以),判断回复时只需要根据 OpenID 取出前两次的消息内容就可以了。
    tudage
        13
    tudage  
       2018-08-19 01:47:33 +08:00
    不太明白需求啊,是用户第一次发送信息,数据库记录,第二次发送信息,数据库记录,然后返回吗,那就直接存数据就是了啊,在返回的时候删除记录的数据
    cz5424
        14
    cz5424  
       2018-08-19 02:00:39 +08:00 via Android
    12 楼正解
    ivanlw
        15
    ivanlw  
       2018-08-19 04:25:52 +08:00 via iPhone
    大家别看不起,楼主的态度至少是在学习,是非常积极的,要给予肯定!
    换个人来,分分钟就是“有搞微信开发的吗?我这里有个简单的 idea,谁来帮我实现下,100 块钱”
    sky101001
        16
    sky101001  
       2018-08-19 08:01:29 +08:00 via iPad
    如果需要找到第一次请求的信息,那就得用上 openid 之类的标识符,每次请求都需要有读写操作,可能效率不是很高。
    虽然不清楚具体需求,但仅对微信而言,其实可以把每次请求的内容存在 localstorage 里,处理后一并发出。避免服务器端消耗资源去找该用户上一次的请求内容
    asd123456cxz
        17
    asd123456cxz  
       2018-08-19 09:18:07 +08:00
    @sky101001 请教下 这个处理是指 预存带有 OpenId 标识的 localstorage 然后添加消息内容 满足条件后发出吗?那该如何在没有和服务器通信之前获取 OpenId 呢?本人比教新手,不太懂前端,谢谢指教
    hhacker
        18
    hhacker  
       2018-08-19 10:06:57 +08:00
    微信公众号接收普通消息(比如文本)时,你会受到微信的主动推送,消息体内就包含有该用户的 openid,你可以对同一个用户短时间内发送的消息视为一次上下文相关的对话,相当于第一次收到消息时开启了一次会话,当你认为收到了足够的会话信息时(比如你需要用户发送的 1 和 2 ),你就可以对该推送进行回复,回复的内容完全是你自己决定的(比如你想要的 3 )
    kalman03
        19
    kalman03  
       2018-08-19 10:14:33 +08:00 via Android
    难道 16 楼不才是正解吗?
    sky101001
        20
    sky101001  
       2018-08-19 22:27:16 +08:00 via iPad
    @asd123456cxz
    如果是在客户端用 localstorage 存储请求,那就不需要 openid,只要将每次请求的内容记录在本地即可。比如 localstorage 中已经记录的数据是 1 (当然 post 出去的数据不仅仅是 1 ),目前想要发送的数据是 2,那就生成一段用于 post 的数据{'previous':1,'current':2},然后刷新 localstorage。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1525 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:57 · PVG 07:57 · LAX 16:57 · JFK 19:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.