[实例] pyQT实现登录界面 python实现服务器 实现网络访问登录退出功能

本文介绍如何使用PyQT创建客户端与Tornado搭建的服务器进行用户登录和登出操作,涉及前后端数据传输和事件处理。
摘要由CSDN通过智能技术生成

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()

 

 效果如图:

登录成功以后进入主界面:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高亚奇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值