LINUX.ORG.RU

flask, сессии.

 ,


0

2

Наверное я не дочитал. Ну да ладно. Итак:
Черт меня дернул добавить в шапку сайта проверку, зарегистрирован пользователь или нет (login, logout). Резко возник вопрос передавать эту переменную на каждой странице, в которую вложена шапка render_template('page', переменная). Ну и костыль. Я уверен, есть более правильный и косфортный способ, который я не знаю.
Второй вопрос по закрытии просмотра страниц незарегистрированным пользователям:

if 'userid' in session:
   показываю
else:
   redirect('login')

Как сделать это проще?



Последнее исправление: masterdilly (всего исправлений: 1)

Как вообще можно писать код, когда ты два слова на русском связать не можешь? Если ты считаешь этот поток шизы вопросом, то очень сильно ошибаешься.

anonymous
()

Как сделать это проще?

Учи уроки.

anonymous
()
#Декоратор для проверки залогинен ли пользователь.
def login_required(f):
    @wraps(f)
    def inner(*args, **kwargs):
        if not session.get('logged_in'):
            return redirect(url_for('login'))
        return f(*args, **kwargs)
    return inner

#Дальше так.
@app.route('/')
@login_required
def home():
    return render_template('index.html')
anonymous
()
Ответ на: комментарий от ipeacocks

Круто, декоратор тут чуть лучше описан. По поводу шапки:

 
{% if user['username'] %} # Это было ошибкой
  <a href="{{ url_for('logout') }}">
    <span class="glyphicon glyphicon-off"
            aria-hidden="true"></span>Logout</a>
{% else %}
  <a href="{{ url_for('login') }}">
    <span class="glyphicon glyphicon-off"
            aria-hidden="true"></span>Login</a>
{% endif %}
Так, как это в шапке, то мне приходится передавать user['username'] в каждую страницу. Как сделать проще?

masterdilly
() автор топика
Ответ на: комментарий от ipeacocks

Спасибо, хороший пример. Добавил понимания.

masterdilly
() автор топика
Ответ на: комментарий от masterdilly

Без сессии - по-хорошему должен быть редирект на страничку с логином. С сессией очевидно username уже есть и можно пользоваться этим обьектом.

ipeacocks ★★★★★
()
Последнее исправление: ipeacocks (всего исправлений: 1)
Ответ на: комментарий от ipeacocks

Да так и сделал. Я пока так языка не знаю, чтобы декораторы рисовать. Да и не нравится мне такой подход. По идее я сделал, что хотел, да, код немного кривой, ну да и проект не портал. В плане обучения, думаю, хватит. Вот список, чего «накрутил»:

  • БД - Postgresql.
  • Поиск (влез в тему полнотекстового, но реализовал пока простой)
  • Загрузка и хранение файлов.
  • Регистрация и т.д.

Всё реализовано без дополнений, кроме драйвера на БД (psycopg2). Понятно, что путь к совершенству ещё долог и тернист. Как Вы считаете, что бы еще реализовать? За основу был взят проект на Django: https://github.com/buckyroberts/Viberr

masterdilly
() автор топика
Ответ на: комментарий от masterdilly

Если говорить о Фласке, то я рекомендую

https://www.youtube.com/playlist?list=PLLjmbh6XPGK4ISY747FUHXEl9lBxre4mM

https://realpython.com/

https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

Последний вроде как должен обновить скоро свои уроки, сейчас они уже полурабочие.

ipeacocks ★★★★★
()
Последнее исправление: ipeacocks (всего исправлений: 2)
Ответ на: комментарий от masterdilly

Ещё orm можно прикрутить. Хотя если только начинаешь, и особо не знаешь как БД работает, то можно и вручную запросы писать.

mahalaka ★★
()
Ответ на: комментарий от masterdilly

Я пока так языка не знаю, чтобы декораторы рисовать. Да и не нравится мне такой подход.

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

По идее я сделал, что хотел, да, код немного кривой, ну да и проект не портал. В плане обучения, думаю, хватит

Я думаю, что очень неплохо учиться делать не только, чтоб работало (хотя это конечно уже многое), а и по лучшим практикам. Но, конечно, без фанатизма.

ipeacocks ★★★★★
()
Ответ на: комментарий от ipeacocks

Да, именно пытаюсь зацепить технику получше. Каноны ;)

masterdilly
() автор топика
Ответ на: комментарий от mahalaka

Потому, что postgres сам не выучится. Гибкости и понимания нет. Делал я на Django. Так запрос можно крутить какой хочу, а там только шаблонные движения, всё остальное - описывай. Не мой путь.

masterdilly
() автор топика
Ответ на: комментарий от masterdilly

Ну, орм не убирает всякие «кручения», это просто уровень абстракции над работой с самой базой, более удобный для долгосрочной поддержки проекта.

mahalaka ★★
()
Ответ на: комментарий от masterdilly

С SQLAlchemy можно крутить не хуже, чем строкой с SQL, зато без головной боли. И не потому что нужно знания SQL, а из-за того, что со временем всё равно придёшь к своему конструктору запросов.

paganmind
()
Ответ на: комментарий от mahalaka

не только «одни удобства», доля гемора тоже появляется. Многое удобнее (а иногда единственно возможно) делать простыми запросами, так что их таки надо уметь.

arkhnchul ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.