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)


相关文章
|
27天前
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
76 5
|
2天前
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
116 86
|
5天前
|
移动开发 小程序 前端开发
几千怎么部署搭建校园服务平台,校园圈子论坛系统小程序搭建,校园系统源码,多种功能一体的综合性校园平台
校园圈子论坛是一款集交友、二手市场、聊天等多功能于一体的校园社交平台,支持App、小程序和H5三端交付。学生可处理闲置物品、结识新朋友,通过算法匹配兴趣相投的用户。平台提供分享邀请机制,支持自动绑定推荐关系,并设有奖励机制。开发过程中需注重数据安全与系统稳定性,确保功能兼容及性能优化。
38 5
|
5天前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
52 3
|
1月前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
5天前
|
小程序 安全 网络安全
清晰易懂!陪玩系统源码搭建的核心功能,陪玩小程序、陪玩app的搭建步骤!
陪玩系统源码包含多种约单方式、实时语音互动、直播间与聊天室、大神申请与抢单、动态互动与社交及在线支付与评价等核心功能。搭建步骤包括环境准备、源码上传与解压、数据库配置、域名与SSL证书绑定、伪静态配置及后台管理。注意事项涵盖源码安全性、二次开发、合规性和技术支持。确保平台安全、合规并提供良好用户体验是关键。
|
1月前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
62 3
|
1月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
1月前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
1月前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务