pyQT客户端代码:
代码结构:
主python 代码:
from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtWidgets import QDialog,QMainWindow,QWidget
import requests
import Ui_login
import Ui_main
#类似与 单例或全局变量
from lib.share import SI
class Win_Login(QWidget):
def __init__(self):
super().__init__() #重要,必不可少
self.ui = Ui_login.Ui_Form()
self.ui.setupUi(self)
self.ui.btn_login.clicked.connect(self.onSignIn)
self.ui.edt_password.returnPressed.connect(self.onSignIn)
def onSignIn(self):
username = self.ui.edt_username.text().strip()
password = self.ui.edt_password.text().strip()
s = requests.Session()
url = "http://192.168.3.78/api/login"
res = s.post(url,json={
"action" : "signin",
"username" : username,
"password" : password
})
resObj = res.json()
if resObj['flag'] != 0:
QMessageBox.warning(
self.ui,
'登录失败',
resObj['msg'])
return
SI.mainWin = Win_Main()
SI.mainWin.show()
self.ui.edt_password.setText('')
self.hide()
class Win_Main(QMainWindow) :
def __init__(self):
super().__init__()
self.ui = Ui_main.Ui_MainWindow()
self.ui.setupUi(self)
self.ui.actionExit.triggered.connect(self.onSignOut)
def onSignOut(self):
s = requests.Session()
url = "http://192.168.3.78/api/loginout"
res = s.post(url,json={
"action" : "signout",
})
resObj = res.json()
if resObj['flag'] != 0:
QMessageBox.warning(
self.ui,
'登出失败',
resObj['msg'])
return
SI.mainWin.hide()
SI.loginWin.show()
app = QApplication([])
SI.loginWin = Win_Login()
SI.loginWin.show()
app.exec_()
share 全局单例 python文件代码:
class SI:
mainWin = None
loginWin = None
python tonarto 服务器代码:
import tornado
class XXWebHandlerBase(tornado.web.RequestHandler):
async def post(self):
await self.post_impl()
async def get(self):
await self.get_impl()
def finish_aes_json(self, chunk=None, wlog=True):
if chunk is None:
chunk = {}
if wlog:
print("服务器返回 ret:{:}".format(chunk))
data = chunk.get("data", None)
if data != None:
data1 = tornado.escape.json_encode(data) #gyq python对象 转 json字符串
self.set_header("Content-Type", "application/json; charset=UTF-8")
self.finish(chunk)
class Login(XXWebHandlerBase):
async def post(self):
"""
用户登陆
"""
data = tornado.escape.json_decode(self.request.body) #gyq json 字符串 转 python对象
print(f"服务器收到 Login:{data}")
user = data["username"]
password = data["password"]
print(f"user:{user},password:{password}")
ret = {
"flag": 0,
"msg": "",
"data": {}
}
self.finish_aes_json(ret)
class loginout(XXWebHandlerBase):
async def post(self):
"""
用户登陆
"""
data = tornado.escape.json_decode(self.request.body) #gyq json 字符串 转 python对象
print(f"服务器收到 Login:{data}")
user = data["action"]
print(f"action:{user}")
ret = {
"flag": 0,
"msg": "",
"data": {}
}
self.finish_aes_json(ret)
class Application(tornado.web.Application):
"""Web应用类
"""
def __init__(self):
#构建应用请求地址处理映射
handlers = [
(r"/api/login", Login),
(r"/api/loginout", loginout),
]
super(Application, self).__init__(handlers,
xsrf_cookies = False,
cookie_secret = "798113b150d6f6125347ff32f1a6cce1ef1bbe21d84dc1b1b95d5ca184bf78cb",
login_url = "/login.html",
autoescape=None)
async def StarServer():
print("StarServer")
#创建web应用实例
webapp = Application()
#创建web服务,服务器要服务与刚创建的application web应用
http_server = tornado.httpserver.HTTPServer(webapp,
xheaders=True,
ssl_options = None)
#开始监听web端口
http_server.listen(80)
print("服务已启动...")
if __name__ == '__main__':
#tornado.ioloop tornado核心IO循环模块,tornode的高性能基石
tornado.ioloop.IOLoop.instance().run_sync(StarServer)
tornado.ioloop.IOLoop.instance().start()
效果如图:
登录成功以后进入主界面: