Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2015 19:17:53

Point
От: Беларусь
Зарегистрирован: 2015-02-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Добрый день всем поклонникам Питона! Изучать Питон начал относительно недавно и до сих пор разбирался с непонятками сам или с помощью поисковиков, но в этот раз должен просить о помощи.
Код:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_security import SQLAlchemyUserDatastore, Security
from datetime import datetime
app = Flask(__name__)
app.config.from_object('config')
from views import *
db = SQLAlchemy(app)
from models import *
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
#security = Security(app, user_datastore)
# Create a user to test with
@app.before_first_request
def create_user():
    db.create_all()
    user_datastore.create_user(nickname="Jihn", email='matt@nobien.net', password='123', active=True,
                               confirmed_at=datetime.utcnow())
    db.session.commit()
if __name__ == '__main__':
    app.run(debug=True)

Проблема: Изначально Питон ругался на blueprint-ы с одинаковыми именами ‘security’, вдумчивое чтение кода показало, что ошибка возникает на этапе регистрации blueprint-а в недрах app.py. После того, как закомментировал “security=…” ошибка исчезла, однако в БД стали появляться двойные записи (поля не уникальны), т.е. функция def create_user() пробегает два раза. Кроме того смутило два процесса python при работающем модуле.
Условия: Windows + Python 2.7/3.4. К сожалению на основном десктопе с Минтом посыпался винт, поэтому проверить на линуксе не могу.
Буду рад любым конструктивным предложениям!

Офлайн

#2 Фев. 13, 2015 19:42:20

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Конструктивнее не куда: забить на блупринты
flask-classy - все, что Вам нужно от жизни…

Офлайн

#3 Фев. 13, 2015 19:53:16

Point
От: Беларусь
Зарегистрирован: 2015-02-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

К сожалению забить на блупринты не получится, т.к. flask_security весьма активно их использует (во всяком случае мне так показалось). Если не найду решения буду писать велосипед на основе flask-login.

Офлайн

#4 Фев. 13, 2015 19:55:08

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Да ну какой велосипед. Побойтесь бога. Там всего-то 10 строк.
А вот flask-security я вижу повелосипедил не-по-детски…

Офлайн

#5 Фев. 13, 2015 19:56:58

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Ну и плюс сильная привязка к типу БД. Если мне модель будет нужна вне фласка - то меня в этом случае будет ждать большоооой облом, а обламываться я не люблю

Офлайн

#6 Фев. 13, 2015 20:27:43

Point
От: Беларусь
Зарегистрирован: 2015-02-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Да собственно скорее всего проблема не во Flask-security. Только что обыграл запуск с полным его отключением. Чтобы понять сколько запускается модуль тупо добавил строку print(“!”).
Итог:
********************************************************
C:\Python34\python.exe CWork/Projects/Python/Blog/init_app.py
!
!
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
!
!
********************************************************
В процессах висит два python-а. Есть предположение что это потоки фласка, не имеющие отношения к проблеме. На это указывает то, что лишь один процесс прослушивает порт (5000), второй в сеть не лезет или не успеваю зарегистрировать.
Кроме того меня смущает тот факт, что после запуска прослушивания print успевает отработать еще два раза, т.е. в сумме 4 раза выполняется команда print!!!!

Офлайн

#7 Фев. 13, 2015 20:46:12

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

print вставили где? Код, а то сложно понять…

Офлайн

#8 Фев. 14, 2015 07:56:12

Point
От: Беларусь
Зарегистрирован: 2015-02-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Print поставил непосредственно в контексте модуля:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#from flask_security import SQLAlchemyUserDatastore, Security
from datetime import datetime
app = Flask(__name__)
app.config.from_object('config')
from views import *
db = SQLAlchemy(app)
from models import *
'''
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
#security = Security(app, user_datastore)
# Create a user to test with
@app.before_first_request
def create_user():
    db.create_all()
    user_datastore.create_user(nickname="Jihn", email='matt@nobien.net', password='123', active=True,
                               confirmed_at=datetime.utcnow())
    db.session.commit()
'''
print('!')
if __name__ == '__main__':
    app.run(debug=True)

Дополнено:
На свежую голову попробовал отключить создание экземпляра SQLAlchemy (закоментил)- print стал выдавать другую картину:
***************
C:\Python34\python.exe CWork/Projects/Python/Blog/init_app.py
!
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
!
***************
Однако процессов в памяти по прежнему два.
Вполне возможно, что я неправильно расставил импорты и инициализации, хотя на первый взгляд все логично. Могу привести код также модуля views и модуля models , но там на мой взгляд ничего интересного в данном вопросе нет.

Отредактировано Point (Фев. 14, 2015 08:03:59)

Офлайн

#9 Фев. 14, 2015 08:24:57

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

Запустил. Отключил импорты. Все то же самое. Видимо, это работа сервера разработки. А именно модуля для отслеживания изменений в файлах проекта и его перезапуска. Можно попробовать выполнить с wsgi и посмотреть результат…

P.S. Так в чем вопрос, собственно? Где не работает?


P.S.S. werkzeug

Отредактировано 4kpt_III (Фев. 14, 2015 08:31:28)

Офлайн

#10 Фев. 14, 2015 08:59:10

Point
От: Беларусь
Зарегистрирован: 2015-02-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятное поведение Flask + Flask-Security

однако в БД стали появляться двойные записи (поля не уникальны), т.е. функция def create_user() пробегает два раза.

1. Если в БД делать уникум записи- будет выпадать ошибка при выполнении функции def create_user (т.к. создание идентичного пользователя будет происходить дважды)
2. Двойная регистрация блуепринта “security”, что приводит к ошибке
…. Можно еще что-нибудь добавить, но пока что это волнует.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version