Python PYQT53层架构理解

CS3层结构  1.表示层   2.业务逻辑层  3.数据访问层

以上的3层结构,并不是指这些代码文件要在3种设备运行,而是说的是在程序中将代码实现的功能给剥离开,从而实现代码的结构层次分明,开发维护便利

通常来讲:我们可以将业务逻辑层和数据访问层放在机房服务器上,客户端通过API调用服务器上的接口,这样我们在修改业务逻辑上不用动客户端程序。

以下通过客户登陆的例子,实现逻辑

一、客户端程序

主要就是实现表示层的工作,展现界面,然后调用服务器API,实现用户密码校验

import sys
from PyQt5 import QtCore,QtGui,QtWidgets
from functools import partial          #传输参数包

from PyQt5.QtWidgets import QMessageBox

import LabelTest
import submit

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()

    ui = LabelTest.Ui_MainWindow()
    ui.setupUi(MainWindow)

    MainWindow.show()
    res = ui.submit_btn.clicked.connect(partial(submit.submit, ui))
    #ui.submit_btn.clicked.connect(submit.click_test)
    sys.exit(app.exec_())

 

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from requests import put, get, post
import json


def click_test():
    print('点击Submit按钮')


def submit(ui):
    name = ui.name.text()
    password = ui.password.text()
    # print(name, password)

    myobj = {}
    myobj["name"] = name
    myobj["password"] = password
    list_json = json.dumps(myobj)
    # print(list_json)

    # 发送请求
    headers = {"Content-Type": "application/json"}
    data = post('http://127.0.0.1:5001/login', data=list_json, headers=headers).json()
    print(data)
    res_msg = data[0]['Flag']
    if res_msg == 'Y':
        msg_box = QMessageBox(QMessageBox.Information, '登陆消息', '登陆成功')
        msg_box.exec_()
    else:
        msg_box = QMessageBox(QMessageBox.Information, '登陆消息', '登陆失败')
        msg_box.exec_()

 

二、服务端程序

主要通过flask_restful模块实现

from flask import Flask, jsonify,request
from flask_restful import Api, Resource, reqparse,abort
import Login

app = Flask(__name__)
api = Api(app, default_mediatype="application/json")

TODOS = {
    'todo1': {'task': 'build an API'},
    'todo2': {'task': '?????'},
    'todo3': {'task': 'profit!'},
}


def abort_if_todo_doesnt_exist(todo_id):
    if todo_id not in TODOS:
        abort(404, message="Todo {} doesn't exist".format(todo_id))

parser = reqparse.RequestParser()
parser.add_argument('task', type=str)


# Todo
#   show a single todo item and lets you delete them
class Todo(Resource):
    def get(self, todo_id):
        abort_if_todo_doesnt_exist(todo_id)
        return TODOS[todo_id]

    def delete(self, todo_id):
        abort_if_todo_doesnt_exist(todo_id)
        del TODOS[todo_id]
        return '', 204

    def put(self, todo_id):
        args = parser.parse_args()
        task = {'task': args['task']}
        TODOS[todo_id] = task
        return task, 201


# TodoList
#   shows a list of all todos, and lets you POST to add new tasks
class TodoList(Resource):
    def get(self):
        return TODOS

    def post(self):
        args = parser.parse_args()
        todo_id = int(max(TODOS.keys()).lstrip('todo')) + 1
        todo_id = 'todo%i' % todo_id
        TODOS[todo_id] = {'task': args['task']}
        return TODOS[todo_id], 201

##
## Actually setup the Api resource routing here
##
api.add_resource(TodoList, '/todos')
api.add_resource(Todo, '/todos/<todo_id>')
api.add_resource(Login.Login, '/login')


app.run(host='0.0.0.0', port=5001, use_reloader=True)

 

 

import logging.config
from flask import Flask, jsonify
from flask_restful import Api, Resource, reqparse

#数据层取数,省略,使用列表替代 Sys_Users
= [ {"name": "jack" , "password": "jack"}, ] class Login(Resource): def post(self): parser = reqparse.RequestParser() parser.add_argument('name', type=str, location='json', required=True, help="登陆名不能为空") parser.add_argument('password', type=str, location='json', required=True, help="密码不能为空") args = parser.parse_args() list_res = [] if args['name'] not in Sys_Users[0]['name']: list_res.append({"Flag":"N","Msg": args['name']+" 不存在"}) if args['name'] in Sys_Users[0]['name'] and args['password'] not in Sys_Users[0]['password']: list_res.append({"Flag":"N","Msg": args['name'] + "密码错误"}) if args['name'] in Sys_Users[0]['name'] and args['password'] in Sys_Users[0]['password']: list_res.append({"Flag":"Y","Msg": args['name'] + "登陆成功"}) return jsonify(list_res)

 

实现效果

 

posted on 2022-09-28 17:18  SmartTony_07  阅读(505)  评论(0)    收藏  举报

导航