Пишем форму авторизации на Python Tkinter

Login to website using python requests

I’m trying to login to https://www.voxbeam.com/login using requests to scrape data. I’m a python beginner and I have done mostly tutorials, and some web scraping on my own with BeautifulSoup.

Looking at the HTML:

<form id="loginForm" action="https://www.voxbeam.com//login" method="post" autocomplete="off">

<input name="userName" id="userName" class="text auto_focus" placeholder="Username" autocomplete="off" type="text">

<input name="password" id="password" class="password" placeholder="Password" autocomplete="off" type="password">

<input id="challenge" name="challenge" value="78ed64f09c5bcf53ead08d967482bfac" type="hidden">

<input id="hash" name="hash" type="hidden">

I understand I should be using the method post, and sending userName and password

I’m trying this:

import requests
import webbrowser

url = "https://www.voxbeam.com/login"
login = {'userName': 'xxxxxxxxx',
         'password': 'yyyyyyyyy'}

print("Original URL:", url)

r = requests.post(url, data=login)

print("nNew URL", r.url)
print("Status Code:", r.status_code)
print("History:", r.history)

print("nRedirection:")
for i in r.history:
    print(i.status_code, i.url)

# Open r in the browser to check if I logged in
new = 2  # open in a new tab, if possible
webbrowser.open(r.url, new=new)

I’m expecting, after a successful login to get in r the URL to the dashboard, so I can begin scraping the data I need.

When I run the code with the authentication information in place of xxxxxx and yyyyyy, I get the following output:

Original URL: https://www.voxbeam.com/login

New URL https://www.voxbeam.com/login
Status Code: 200
History: []

Redirection:

Process finished with exit code 0

I get in the browser a new tab with www.voxbeam.com/login

Is there something wrong in the code?
Am I missing something in the HTML?
It’s ok to expect to get the dashboard URL in r, or to be redirected and trying to open the URL in a browser tab to check visually the response, or I should be doing things in a different way?

I been reading many similar questions here for a couple of days, but it seems every website authentication process is a little bit different, and I checked http://docs.python-requests.org/en/latest/user/authentication/ which describes other methods, but I haven’t found anything in the HTML that would suggest I should be using one of those instead of post

I tried too

r = requests.get(url, auth=('xxxxxxxx', 'yyyyyyyy')) 

but it doesn’t seem to work either.

Авторизуемся на сайте

В этом примере будем использовать сайт, который нам также потребуется в следующем примере. Для начала зарегистрируемся на сайте WorldWeatherOnline. После удачной регистрации на сайте в личном кабинете вы увидите API KEY, который потребуется для следующего примера.

Выход из системы

Мы реализовали вход, самое время добавить возможность выхода из системы. Это делается очень просто (файл app/views.py):

Для чего и где мы можем применять requests?

Как было отмечено выше, библиотека позволяет нам легко и с минимальным количеством кода взаимодействовать с веб-приложениями. Это необходимо нам для решения любых задач, связанных с передачей информации от пользователя к серверу и обратно. Но, чтобы что-то хорошо понять, необходимо закрепить теоретические знания практикой, поэтому перейдём от слов к делу.

Заключительные слова

Теперь у нас есть полноценная система для авторизации пользователей. В следующей главе мы создадим страницу профиля пользователя, и добавим возможность использования аватаров.

Конфигурация

Как и в предыдущих главах, мы начнём с настройки расширений, которые будем использовать. Для авторизации нам понадобятся два расширения — Flask-Login и Flask-OpenID. Настроим их следующим образом (файл app/__init__.py):

import os
from flask.ext.login import LoginManager
from flask.ext.openid import OpenID
from config import basedir

lm = LoginManager()
lm.init_app(app)
oid = OpenID(app, os.path.join(basedir, 'tmp'))

Расширению Flask-OpenID нужно где-то хранить свои временные файлы, для этого при инициализации ему передаётся путь до папки tmp.

Краткое повторение

В предыдущей части мы создали базу данных и научились заполнять её пользователями и постами, однако этот функционал еще не реализован в нашем приложении. Две главы назад мы узнали, как создавать веб-формы и создали форму для авторизации.

В этой статье мы объединим наши знания о веб-формах и базах данных и напишем свою систему для входа пользователей. В конце данного руководства наше небольшое приложение будет регистрировать новых пользователей и проводить их авторизацию.

Для работы с этой главой ваше приложение должно быть таким, каким мы оставили его в конце предыдущей главы. Пожалуйста, убедитесь, что приложение установлено и работает.

Обработка ответа от провайдера openid

Так выглядит реализация функции after_login(файл app/views.py):

Отображение главной страницы

В предыдущей главе мы использовали в функции index объекты-заглушки, так как у нас еще не было настоящих пользователей и постов. Теперь у нас есть пользователи, самое время это использовать:

Пишем форму авторизации на python tkinter

В данной статье мы рассмотрим с Вами как можно быстро создать графическое приложение с использованием
библиотеки Python Tkinter
. Проектировать мы будем экран авторизации, в который пользователь должен ввести
свой логин и пароль. Версия Python, которая используется в коде 3.8. Код с комментариями представлен ниже.


# импортируем библиотеку tkinter всю сразу
from tkinter import *
from tkinter import messagebox

# главное окно приложения
window = Tk()
# заголовок окна
window.title('Авторизация')
# размер окна
window.geometry('450x230')
# можно ли изменять размер окна - нет
window.resizable(False, False)

# кортежи и словари, содержащие настройки шрифтов и отступов
font_header = ('Arial', 15)
font_entry = ('Arial', 12)
label_font = ('Arial', 11)
base_padding = {'padx': 10, 'pady': 8}
header_padding = {'padx': 10, 'pady': 12}

# обработчик нажатия на клавишу 'Войти'
def clicked():

    # получаем имя пользователя и пароль
username = username_entry.get()
password = password_entry.get()

    # выводим в диалоговое окно введенные пользователем данные
messagebox.showinfo('Заголовок', '{username}, {password}'.format(username=username, password=password))

# заголовок формы: настроены шрифт (font), отцентрирован (justify), добавлены отступы для заголовка
# для всех остальных виджетов настройки делаются также
main_label = Label(window, text='Авторизация', font=font_header, justify=CENTER, **header_padding)
# помещаем виджет в окно по принципу один виджет под другим
main_label.pack()

# метка для поля ввода имени
username_label = Label(window, text='Имя пользователя', font=label_font , **base_padding)
username_label.pack()

# поле ввода имени
username_entry = Entry(window, bg='#fff', fg='#444', font=font_entry)
username_entry.pack()

# метка для поля ввода пароля
password_label = Label(window, text='Пароль', font=label_font , **base_padding)
password_label.pack()

# поле ввода пароля
password_entry = Entry(window, bg='#fff', fg='#444', font=font_entry)
password_entry.pack()

# кнопка отправки формы
send_btn = Button(window, text='Войти', command=clicked)
send_btn.pack(**base_padding)

# запускаем главный цикл окна
window.mainloop()

Теперь проясню пару моментов в коде:

1) в коде используется вот такая конструкция **header_padding – это операция разложения словаря в составляющие переменные.
В нашем примере преобразование будет выглядеть следующим образом:
**header_padding = {‘padx’: 10, ‘pady’: 12} -> header_padding -> padx=10, pady=12. Т.е. в конструктор класса Label, например,
фактически будут передаваться правильные параметры. Это сделано для удобства, чтобы несколько раз не писать одни и теже
настройки отступов.
2) у виджетов (Label, Button, Entry) – есть несколько менеджеров расположения, которые определяют, как дочерний виджет
будет располагаться в родительском окне (контейнере). В примере, был использован метод pack(), который, по умолчанию, располагает
виджет один под другим.

Таким образом, мы создали кроссплатформенное графическое приложение на Python – авторизация пользователя,
которое может пригодиться на практике, остается добавить логику авторизации в методе clicked.

А для тех кто интересуется языком Python – я записал видеокурс Программированию на Python с Нуля до Гуру,
в 5-ом разделе которого Создание программ с GUI подробно описывается все компоненты, необходимые для создания
Python приложения c графическим интерфейсом.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://vhod-v-lichnyj-kabinet.ru)!

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Примеры использования библиотеки requests

Для работы с примерами мы будем использовать два способа: работа в командной строке и написание скриптов в .py-файлах для их дальнейшего запуска.

Я показываю использование командной строки, так как это полезный навык, который пригодится в дальнейшем, когда надо будет быстро что-то проверить.

Для начала, поскольку библиотека является внешней, нам необходимо её установить. Делается это очень просто в командной строке:

$ pip install requests 

Продолжим использовать консоль. После установки в нашем расположении (у меня это диск D) введем команду:

D:> python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2022, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

Теперь можем проверить установку библиотеки произведя импорт:

>>> import requests 

Скачаем изображение с сайта

В этом примере мы будем применять всё тот же запрос GET, но, в отличие от предыдущего, мы будем работать с содержимым ответа.

Узнаем погоду в москве

В этом примере мы будем использовать API KEY с сайта WorldWeatherOnline, на котором мы зарегистрировались в прошлом примере. В разделе документации на сайте WorldWeatherOnline приведено подробное описание параметров.

Теперь уже с использованием вашей любимой IDE напишем скрипт, который будет принимать в качестве аргумента из командной строки город, а возвращать значение температуры.

Создадим файл и назовём его weather.py. Запишем в него:

Функция представления авторизации

Давайте обновим нашу функцию представления (файл app/views.py):

Похожее:  GitHub - blohinn/simple-php-vk-auth: U.P.D. Писалось ради интереса. Мой первый опыт работы с VK API напрямую.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *