Re: Рецепти для Flask
Дозволяємо лише потрібні символи (літери латинського алфавіту і крапка) в формі однією стрічкою:
<input onkeypress="return /[a-z\.]/i.test(event.key)" type="text" id="receiver_text" name="receiver_text" size="30" required>
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → Рецепти для Flask
Сторінки Попередня 1 2 3 4 5 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
Дозволяємо лише потрібні символи (літери латинського алфавіту і крапка) в формі однією стрічкою:
<input onkeypress="return /[a-z\.]/i.test(event.key)" type="text" id="receiver_text" name="receiver_text" size="30" required>
Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?
Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?
Якщо я розумію під словом аплікація те саме що й ви тоді ні.
frz написав:Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?
Якщо я розумію під словом аплікація те саме що й ви тоді ні.
Спробую висловитися конкретніше, з врахуванням того що я дуже зелений в цьому напрямку.
Отже, я вкладаю в поняття Flask аплікації окрему фізичну папку, в основі якої лежить файл __init__.py (чи інший, наприклад app.py).
Для іншої аплікації потрібна інша папка зі своїм файлом __init__.py
Якщо ж в принципі можливо індивідуально запаролити окремі форми (файли nameN.html в папці templates) з різними парами логін/пароль в рамках одного й того ж файлу __init__.py, то дайте знати плз як це зробити.
pluszz написав:frz написав:Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?
Якщо я розумію під словом аплікація те саме що й ви тоді ні.
Спробую висловитися конкретніше, з врахуванням того що я дуже зелений в цьому напрямку.
Отже, я вкладаю в поняття Flask аплікації окрему фізичну папку, в основі якої лежить файл __init__.py (чи інший, наприклад app.py).
Для іншої аплікації потрібна інша папка зі своїм файлом __init__.pyЯкщо ж в принципі можливо індивідуально запаролити окремі форми (файли nameN.html в папці templates) з різними парами логін/пароль в рамках одного й того ж файлу __init__.py, то дайте знати плз як це зробити.
Впринципі можливо зробити щоб один і той самий файл nameN.html в папці templates видавав різну інформаційю різним користувачаv розгляним cлідуючу ситуацію ми маємо модель данних користувача
class User(Base):
id=("bla-bla-bla")
name="Karl"
Group='kozly'
в route.py
from model import User
@app.route('/nameN')
@login_required
def nameN():
user = User()
return render_template('nameN.html', title=_('nameN'),user=user)
в nameN.html
<title>{{title}}</title>
{% if user.group=='kozel' %}
<p>Беее!!!Б</p>
{% else %}
<p>Meeee!!!!</p>
{% endif %}
в nameN.html
<title>{{title}}</title> {% if user.group=='kozel' %} <p>Беее!!!Б</p> {% else %} <p>Meeee!!!!</p> {% endif %}
Це корисно з тієї точки зору, що коли користувач пробує подивитися форму, яка для нього не призначена, то замість цього контенту буде бачити повідомлення "нема доступу, зверніться до адміністратора". Або ж навіть на головній сторінці просто не буде посилання на цей контент. Цікаво тільки, як саме це реалізовано, чи кінцевий html буде просто приховувати такий контент, чи навіть не буде містити його взагалі. Так як я ще не дійшов до Flask-User https://flask-user.readthedocs.io/en/la … ction.html , то не маю можливості потестувати.
Зараз цікавлюся як відображати прогрес користувачу після натискання кнопки. Кнопка буде запускати скрипт Python, який звертається до бази (не локальної), отримує результат в файлі csv і повертає користувачу файл для скачування (в перспективі також надсилає файл за вказаною адресою email). На кожному етапі можливі якісь помилки і мене цікавить, які є варіанти щоб користувач бачив кроки - що саме робиться. Чи хоча би як саме дати кінцеву відповідь користувачу, що саме пішло не так (крім логів на сервері).
Потрібно передати системну змінну в код Python.
test.py:
#!/usr/bin/env python
import os
myvar = os.getenv('SOMEVALUE')
Тестую з-під непривілейованого юзера - все ок. Використовую sudo - змінна має значення None. Хоча я заповнив як в ~/.bashrc так і в /root/.bashrc
В чому може бути прикол? (Так, саме цей допис стосується більше *nix ніж Python i Flask)
Спробуйте так ,вбийте в терміналі при запущеннім вашім віртуальні середовищі.
export SOMEVALUE=ваші дані
Потрібно передати системну змінну в код Python.
test.py:
#!/usr/bin/env python import os myvar = os.getenv('SOMEVALUE')
Тестую з-під непривілейованого юзера - все ок. Використовую sudo - змінна має значення None. Хоча я заповнив як в ~/.bashrc так і в /root/.bashrc
В чому може бути прикол? (Так, саме цей допис стосується більше *nix ніж Python i Flask)
Досить лише .bashrc
Але працює лише у наступній відкритій консолі.
~ $ echo 'export TEST_TEST="q qq qqq"' >>.bashrc
~ $ echo $TEST_TEST
~ $
Відкрив нову консоль
~ $ echo $TEST_TEST
q qq qqq
~ $ sudo echo $TEST_TEST
q qq qqq
~ $ sudo -s
~ # echo $TEST_TEST
q qq qqq
~ # exit
~ $
Google App Engine (GAE) підтримує Flask
https://codelabs.developers.google.com/ … ne-python3
Не розумію чому в GAE спроба прикрутити базову аутентифікацію https://stackoverflow.com/a/46163290 повертає помилку bad gateway.
Із складнішими методами авторизації не бачу сенсу поки що зв'язуватися.
https://cloud.google.com/appengine/docs … thon/oauth
Знайшов в логах GAE:
from flask_httpauth import HTTPBasicAuth
ModuleNotFoundError: No module named 'flask_httpauth'
але на інстансі вже встановлено flask_httpauth:
$ pip3 install flask_httpauth
Requirement already satisfied: flask_httpauth in ./.local/lib/python3.7/site-packages (4.2.0)
Requirement already satisfied: Flask in /usr/local/lib/python3.7/dist-packages (from flask_httpauth) (1.1.2)
Requirement already satisfied: click>=5.1 in /usr/local/lib/python3.7/dist-packages (from Flask->flask_httpauth) (7.0)
Requirement already satisfied: Werkzeug>=0.15 in /usr/local/lib/python3.7/dist-packages (from Flask->flask_httpauth) (1.0.1)
Requirement already satisfied: itsdangerous>=0.24 in /usr/local/lib/python3.7/dist-packages (from Flask->flask_httpauth) (1.1.0)
Requirement already satisfied: Jinja2>=2.10.1 in /usr/local/lib/python3.7/dist-packages (from Flask->flask_httpauth) (2.11.2)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from Jinja2>=2.10.1->Flask->flask_httpauth) (1.1.1)
Не розумію в чому справа...
Про всяк випадок встановив також не pip3 а просто pip:
pip install flask_httpauth
але поки що нічого не допомогло.
Upd: про всяк випадок ось мій код:
import flask
from flask import Flask
from flask import jsonify
from Flask_HTTPAuth import HTTPBasicAuth
app = flask.Flask(__name__)
auth = HTTPBasicAuth()
@app.route("/", methods=["GET"])
def hello():
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
@app.route('/rest-auth')
@auth.login_required
def get_response():
return jsonify('You are authorized to see this message')
@auth.verify_password
def authenticate(username, password):
if username and password:
if username == 'test' and password == '2345':
return True
else:
return False
return False
if __name__ == "__main__":
app.run(host="localhost", port=8080, debug=True)
Пофіксив за допомогою https://www.idiotinside.com/2015/09/21/ … ngo-flask/
Ґайд підійде тим кому достатньо однієї пари юзернейм-пароль.
Тепер пробую передати параметри
@app.route("/private3", methods=['GET', 'POST'])
@requires_auth #requires_auth decorator for basic auth
def private_page3(arg1, arg2):
arg1 = request.args['arg1']
arg2 = request.args['arg2']
return "Hello I'm Private 3!! " + arg1 + " " + arg2
https://example.com/private3?arg1=test1&arg2=test2
Отримую помилку:
TypeError: private_page3() missing 2 required positional arguments: 'arg1' and 'arg2'
Не роздупляю поки що як саме це пофіксити.
Пофіксив:
@app.route("/private3")
@requires_auth #requires_auth decorator for basic auth
def private_page3():
arg1 = request.args['arg1']
arg2 = request.args['arg2']
return "Hello I'm Private 3!! " + arg1 + " " + arg2
В функції private_page3() вхідні параметри просто були непотрібні.
https://example.com/private3?arg1=test1d&arg2=test2d
Відповідь:
Hello I'm Private 3!! test1d test2d
Все працює
Підключення CSS весь мозок перетерло в порох.
Після внесення змін у CSS файл стилі не змінювалися. Дві годині убив на гугління і тикокодування.
Виявилося все простіше простішого, стилі кешуються браузером, тому зміни в файлі не відображались на сторінці.
Щоб цього уникнути тре на пряму вказувати версію стилів, щоб браузер користувача побачив що в нього стара версія, і
завантажив свіжий СSS файл. У себе я то вирішив так:
<link rel="stylesheet" href="{{ url_for('static', filename='style.css', v=2) }}">
якщо не використовувати url_for то:
<link rel="stylesheet" href="style.css?v=2">
Не розумію як приймати значення передані методом POST в тілі запиту. Поки що добився щоб приймалися значення лише передані в параметрах url методом GET.
Не розумію як приймати значення передані методом POST в тілі запиту. Поки що добився щоб приймалися значення лише передані в параметрах url методом GET.
чи пробували дослідити об1єет request?
https://tedboy.github.io/flask/generate … quest.html