python例程:《看图猜成语》程序


《看图猜成语》程序使用说明

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

图1 登录页面
在这里插入图片描述

图2 微信授权
在这里插入图片描述

图3 小程序首页
在这里插入图片描述

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

图4 开始答题
在这里插入图片描述

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

图5 答案正确
在这里插入图片描述

图6 答案错误
在这里插入图片描述

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

图7 通过信息
在这里插入图片描述

图8 分享好友
在这里插入图片描述

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

图9 排行榜
在这里插入图片描述

主要代码展示

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)

源码下载路径

python例程-看图猜成语程序使用说明.zip

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斗士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值