python微信小程序看图猜成语源码flask

简介: 启动Idiom/flask下的venv虚拟环境,运行python manage.py runserver命令启动Flask。然后打开微信开发者工具并扫码登录,选择flask/weapp-idiom小程序,加载完成后进入小程序登录页面,

启动Idiom/flask下的venv虚拟环境,运行python manage.py runserver命令启动Flask。然后打开微信开发者工具并扫码登录,选择flask/weapp-idiom小程序,加载完成后进入小程序登录页面,如图1所示。单击“微信登录”提示微信授权,如图2所示。单击“允许”按钮,即可进入到小程序首页。如图3所示。

29c9805e5b68028eb03e0bfb95d9295.png


单击“开始挑战”,进入答题页面,如图4所示。在答题页面,鼠标单击选项区的汉字,则会将该汉字填充到当前的答案框中。如要修改答案,可以单击答案中汉字,则该汉字退回到选项区。

657b2a74815304e243053d4bbb9abee.png


如果填写4个汉字后,答案正确,则进入下一关,如图5所示。否则提示错误信息,如图6所示。

d3988d1b3ba634c7eafa4e6f9d6d64e.png


全部通关以后,提示通关信息如图7所示。单击“告诉朋友”按钮,即可分享好友,如图8所示。


54db2109f3bd28f6f0aa024c9bc59c7.png

单击“回到主页”,在主页点击“排行榜”即可查看比赛排行。如图9所示。


219b4cac8c339649c278e5c65205500.png


小程序因其“用完即走”的特性备用用户欢迎,其中各种答题类的小程序因具备一定的趣味性而异常火爆,下面,我们就模拟猜成语小程序,开发一款寓教于乐的“看图猜成语小程序”。


基本技能要求:

flask 基础知识

小程序基础知识

开发及运行环境:

虚拟环境:virtualenv。

数据库:PyMySQL驱动+ MySQL。

开发工具:微信开发者工具+PyCharm / Sublime Text 3。

PythonWeb 框架:Flask。

接口调试工具:Postman。

数据库设计:

本项目采用MySQL数据库,数据库名称为idiom。在小程序中涉及用户信息和题目信息,所以在idom数据库下包含2张数据表,数据表名称及作用如下:


user表:存储用户信息,包括用户昵称、头像和排名等。

exam表:存储题目信息,包括图片、答案和备选项等。

使用说明

使用pip安装virtualenv,命令如下:

pip install virtualenv

1

在“flask/”目录下,创建venv 虚拟环境,命令如下:

virtualenv  venv

1

启动虚拟环境,

windows下命令如下:

venv\scripts\activate
1

mac下命令如下:

source venv\bin\activate

1

安装依赖,命令如下:

pip install -r requirements.txt
1

创建数据库,命名为idom

使用数据迁移命令

python manage.py db init
python manage.py db migrate
python manage.py db upgrade
1

3

创建完数据表后,将“flask\idiom.sql”文件导入到数据库

启动python,运行如下命令:

python manage.py runserver

1

开启小程序调试工具,新建项目,项目目录是“idiom/weapp-idiom”。

部分源码如下,其余完整详见下载。


from flask import Blueprint
from app.models import Member,Exam
from flask import jsonify,g,request
from flask_httpauth import HTTPTokenAuth
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from app.libs.MemberService import MemberService
from app import db
from werkzeug.http import HTTP_STATUS_CODES
api = Blueprint('api', __name__)
# 设置Token验证
auth = HTTPTokenAuth(scheme='Bearer')
serializer = Serializer('mrsoft', expires_in=1800)
@auth.verify_token
def verify_token(token):
    try:
        data = serializer.loads(token)    # 验证token
    except:
        return False
    if 'user_id' in data:
        g.user_id = data['user_id']
        return True
    return False
@auth.error_handler
def token_auth_error():
    return error_response(401)
def error_response(status_code, message=None):
    response = {
        "code": status_code,
        "msg": HTTP_STATUS_CODES.get(status_code),
        "data": {}
    }
    return jsonify(response)
@api.route('/users/wx_login',methods=['POST'])
def wx_login():
    req = request.values # 接受数据
    # 接受数据
    nickname = req['nickname'] if 'nickname' in req else ''
    avatar = req['avatar'] if 'avatar' in req else ''
    # 判断code 是否存在
    code = req['code'] if 'code' in req else ''
    if not code or len( code ) < 1:
        result = {
            "code": -1,
            "msg": "需要微信授权code",
            "data": {}
        }
        return jsonify(result)
    # 根据code,获取openid
    openid = MemberService.getWeChatOpenId( code )
    if openid is None:
        result = {
            "code":-1,
            "msg":"调用微信出错",
            "data":{}
        }
        return jsonify(result)
    # 如果用户存在,写入member表中
    member = Member.query.filter_by(openid=openid).first()
    if not member:
        member = Member(
            openid   = openid,
            nickname = nickname,
            avatar   = avatar,
            sesion   = sesion,
        )
        db.session.add(member)
        db.session.commit()
    sesionTotal = db.session.query(Exam).count()
    token = serializer.dumps({'user_id': member.id})       # 生成token
    # 返回结果
    result = {
        "code":1,
        "msg":"登录成功",
        "data":
            {"userInfo":
                 {
                     "userId": member.id,
                     "nickName": member.nickname,
                     "avatar": member.avatar,
                     "sesion": member.sesion,
                 },
            "sesionTotal":sesionTotal,
            "token": token.decode(),  # byte 转化为string
            }
    }
    return jsonify(result)
@api.route('/exams',methods=["POST"])
@auth.login_required
def get_exam():
    sesion = request.values['sesion']
    try:
        exam = Exam.query.filter_by(id=sesion).first()
        result = {
            "code": 1,
            "data": {
                    "answer": exam.answer,
                    "candidates": exam.candidates.split(","),
                    "image": exam.pictureUrl
                },
            "message": "请求成功"
        }
    except:
        result = {
            "code": 0,
            "data": {},
            "message": "请求失败"
        }
    return jsonify(result)
@api.route('/exams/update_sesion',methods=["POST"])
@auth.login_required
def update():
    sesion = int(request.values['sesion'])
    userId = int(request.values['userId'])
    # 更改用户关卡
    try:
        member = Member.query.filter_by(id=userId).first()
        member.sesion = sesion
        db.session.commit()
        result = {
            "code": 1,
            "msg": "请求成功",
            "data": {
                "sesion": sesion
            }
        }
    except:
        result = {
            "code": 0,
            "msg": "更新失败",
            "data": {}
        }
    return jsonify(result)
@api.route('/rank',methods=["POST"])
@auth.login_required
def get_rank():
    '''
    排行榜
    '''
    members = Member.query.order_by(Member.sesion.desc()).limit(10).all()
    data = []
    for item in members:
        userInfo = {
            "userId": item.id,
            "nickname": item.nickname,
            "avatar": item.avatar,
            "sesion": item.sesion,
        }
        data.append(userInfo)
    # 返回结果
    result = {
        "code":1,
        "msg":"请求成功",
        "data": data
    }
    return jsonify(result)


相关文章
|
2月前
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
155 5
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
200 61
|
2月前
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
220 86
|
1月前
|
JavaScript
jQuery+HTML5实现的微信大转盘抽奖源码
这是一款基于jQuery+HTML5实现的微信大转盘抽奖效果源码,是一款可配置奖品抽奖的jQuery大转盘抽奖代码,可实现点击按钮转轮旋转实现抽奖功能,效果逼真自然,代码里面有详细的注释,可以修改文字或者二次开发都可以
45 11
|
2月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
102 7
|
3月前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
3月前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
135 3
|
3月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
170 3
|
3月前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
188 2
|
3月前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
248 2

热门文章

最新文章