61

Re: Рецепти для Flask

Дозволяємо лише потрібні символи (літери латинського алфавіту і крапка) в формі однією стрічкою:

<input onkeypress="return /[a-z\.]/i.test(event.key)" type="text" id="receiver_text" name="receiver_text" size="30" required>

62

Re: Рецепти для Flask

Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?

63

Re: Рецепти для Flask

frz написав:

Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?

Якщо я розумію під словом аплікація те саме що й ви тоді ні.

64

Re: Рецепти для Flask

pluszz написав:
frz написав:

Чи вірно я розумію, що для авторизації окремих форм під різними користувачами (тобто кожному своя форма) в Flask доведеться робити окремі аплікації?

Якщо я розумію під словом аплікація те саме що й ви тоді ні.

Спробую висловитися конкретніше, з врахуванням того що я дуже зелений в цьому напрямку.
Отже, я вкладаю в поняття Flask аплікації окрему фізичну папку, в основі якої лежить файл __init__.py (чи інший, наприклад app.py).
Для іншої аплікації потрібна інша папка зі своїм файлом __init__.py

Якщо ж в принципі можливо індивідуально запаролити окремі форми (файли nameN.html в папці templates) з різними парами логін/пароль в рамках одного й того ж файлу __init__.py, то дайте знати плз як це зробити.

65 Востаннє редагувалося plusxx (11.01.2021 20:59:21)

Re: Рецепти для Flask

frz написав:
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 %}
Подякували: frz1

66

Re: Рецепти для Flask

в 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 , то не маю можливості потестувати.

67 Востаннє редагувалося frz (17.01.2021 00:43:53)

Re: Рецепти для Flask

Зараз цікавлюся як відображати прогрес користувачу після натискання кнопки. Кнопка буде запускати скрипт Python, який звертається до бази (не локальної), отримує результат в файлі csv і повертає користувачу файл для скачування (в перспективі також надсилає файл за вказаною адресою email). На кожному етапі можливі якісь помилки і мене цікавить, які є варіанти щоб користувач бачив кроки - що саме робиться. Чи хоча би як саме дати кінцеву відповідь користувачу, що саме пішло не так (крім логів на сервері).

68

Re: Рецепти для Flask

Потрібно передати системну змінну в код Python.

test.py:

#!/usr/bin/env python
import os

myvar = os.getenv('SOMEVALUE')

Тестую з-під непривілейованого юзера - все ок. Використовую sudo - змінна має значення None. Хоча я заповнив як в ~/.bashrc так і в /root/.bashrc

В чому може бути прикол? (Так, саме цей допис стосується більше *nix ніж Python i Flask)

69

Re: Рецепти для Flask

Спробуйте так ,вбийте в терміналі при запущеннім вашім віртуальні середовищі.

export SOMEVALUE=ваші дані
Подякували: frz1

70

Re: Рецепти для Flask

frz написав:

Потрібно передати системну змінну в код 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
~ $
Подякували: frz1

71

Re: Рецепти для Flask

Google App Engine (GAE) підтримує Flask
https://codelabs.developers.google.com/ … ne-python3

72

Re: Рецепти для Flask

Не розумію чому в GAE спроба прикрутити базову аутентифікацію https://stackoverflow.com/a/46163290 повертає помилку bad gateway.

Із складнішими методами авторизації не бачу сенсу поки що зв'язуватися.
https://cloud.google.com/appengine/docs … thon/oauth

73

Re: Рецепти для Flask

Знайшов в логах 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

але поки що нічого не допомогло.

74

Re: Рецепти для Flask

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)

75

Re: Рецепти для Flask

Пофіксив за допомогою https://www.idiotinside.com/2015/09/21/ … ngo-flask/
Ґайд підійде тим кому достатньо однієї пари юзернейм-пароль.

76

Re: Рецепти для 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'

Не роздупляю поки що як саме це пофіксити.

77

Re: Рецепти для Flask

Пофіксив:

@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

Все працює  *THUMBSUP*

78 Востаннє редагувалося plusxx (08.02.2021 00:20:56)

Re: Рецепти для Flask

Підключення 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">
Прихований текст

Звичайно можна кеш чистити в ручну. :D  :D  :D

79

Re: Рецепти для Flask

Не розумію як приймати значення передані методом POST в тілі запиту. Поки що добився щоб приймалися значення лише передані в параметрах url методом GET.

80

Re: Рецепти для Flask

frz написав:

Не розумію як приймати значення передані методом POST в тілі запиту. Поки що добився щоб приймалися значення лише передані в параметрах url методом GET.

чи пробували дослідити об1єет request?
https://tedboy.github.io/flask/generate … quest.html