Возможно ли войти в админку Django через PyQt5? - PullRequest
0 голосов
/ 16 октября 2019

Хотелось бы узнать, можно ли войти в django через PyQt5. Я пробовал несколько вещей, но без особого успеха. Ниже я попробую решение с использованием QtNetwork из PyQt5. Это мой код:

import json
import sys

import requests
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLineEdit, QMessageBox, QLabel
from PyQt5.QtCore import pyqtSlot
from PyQt5 import QtCore, QtGui, QtNetwork
from django.test import Client
from querystring import querystring


class AppLogin(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'Login in the Desktop Application'
        self.left = 500
        self.top = 300
        self.width = 380
        self.height = 180
        self.username = None
        self.password = None
        self.button = None
        self.nam = QtNetwork.QNetworkAccessManager()

    def __call__(self, *args, **kwargs):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Create an username textbox
        self.username = QLineEdit(self)
        self.username.move(20, 20)
        self.username.resize(280, 40)
        self.username.setPlaceholderText('Usuário')

        # Create a password textbox
        self.password = QLineEdit(self)
        self.password.setEchoMode(QLineEdit.Password)
        self.password.move(20, 80)
        self.password.resize(280, 40)
        self.password.setPlaceholderText('Senha')

        # Create a button in the window
        self.button = QPushButton('Login', self)
        self.button.move(20, 140)

        # connect button to function login
        self.button.clicked.connect(self.login)
        self.show()

    @pyqtSlot()
    def login(self):
        # User and passwd in my desktop app
        user = self.username.text()
        passwd = self.password.text()

        # My Django app Url 
        url = "http://127.0.0.1:8000/login"
        data = {'username': user, 'password': passwd}

        # Here, I use QtNetWork to takes request
        req = QtNetwork.QNetworkRequest(QtCore.QUrl(url))
        req.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader,
                      "application/x-www-form-urlencoded")

        self.nam.finished.connect(self.handle_response)
        self.nam.post(req, data)

    # Function to reply error
    def handle_response(self, reply):
        error = reply.error()
        # Doesn't entry here
        if error == QtNetwork.QNetworkReply.NoError:
            print("success!!!")

        # Neither entry here 
        else:
            QMessageBox.question(
                self, 'Error', "Unauthenticated user!", QMessageBox.Ok, QMessageBox.Ok
            )
            self.username.setText("")
            self.password.setText("")
        QtCore.QCoreApplication.quit()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = AppLogin()
    ex()
    sys.exit(app.exec_())

Объясняя лучше ... Моя проблема заключалась в создании приложения с PyQt5 или Pyside для теста задания, которое использовало службу веб-аутентификации (Django, Flask и т. Д.). В настольном приложении должно быть окно с именем пользователя и паролем, которое обращается к этой информации. Я послал им приложение, которое запрашивает мою локальную базу данных, просто ищет имя пользователя ( код здесь ). Тем не менее, я хотел бы знать, есть ли способ следовать этой строке кода выше.

...