|
1 |
| -from flask import Flask, render_template |
| 1 | +from flask import Flask, flash, render_template, redirect, url_for |
| 2 | +from flask_login import LoginManager, current_user, login_required, login_user, logout_user |
2 | 3 |
|
3 |
| -from webapp.model import db, News |
| 4 | +from webapp.forms import LoginForm |
| 5 | +from webapp.model import db, News, User |
4 | 6 | from webapp.weather import weather_by_city
|
5 | 7 |
|
6 | 8 | def create_app():
|
7 | 9 | app = Flask(__name__)
|
8 | 10 | app.config.from_pyfile('config.py')
|
9 | 11 | db.init_app(app)
|
10 | 12 |
|
| 13 | + login_manager = LoginManager() |
| 14 | + login_manager.init_app(app) |
| 15 | + login_manager.login_view = 'login' |
| 16 | + |
| 17 | + @login_manager.user_loader |
| 18 | + def load_user(user_id): |
| 19 | + return User.query.get(user_id) |
| 20 | + |
11 | 21 | @app.route('/')
|
12 | 22 | def index():
|
13 | 23 | title = "Новости Python"
|
14 | 24 | weather = weather_by_city(app.config['WEATHER_DEFAULT_CITY'])
|
15 | 25 | news_list = News.query.order_by(News.published.desc()).all()
|
16 | 26 | return render_template('index.html', page_title=title, weather=weather, news_list=news_list)
|
17 | 27 |
|
| 28 | + @app.route('/login') |
| 29 | + def login(): |
| 30 | + if current_user.is_authenticated: |
| 31 | + return redirect(url_for('index')) |
| 32 | + title = "Авторизация" |
| 33 | + login_form = LoginForm() |
| 34 | + return render_template('login.html', page_title=title, form=login_form) |
| 35 | + |
| 36 | + @app.route('/process-login', methods=['POST']) |
| 37 | + def process_login(): |
| 38 | + form = LoginForm() |
| 39 | + |
| 40 | + if form.validate_on_submit(): |
| 41 | + user = User.query.filter(User.username == form.username.data).first() |
| 42 | + if user and user.check_password(form.password.data): |
| 43 | + login_user(user) |
| 44 | + flash('Вы успешно вошли на сайт') |
| 45 | + return redirect(url_for('index')) |
| 46 | + |
| 47 | + flash('Неправильные имя пользователя или пароль') |
| 48 | + return redirect(url_for('login')) |
| 49 | + |
| 50 | + @app.route('/logout') |
| 51 | + def logout(): |
| 52 | + logout_user() |
| 53 | + flash('Вы успешно разлогинились') |
| 54 | + return redirect(url_for('index')) |
| 55 | + |
| 56 | + @app.route('/admin') |
| 57 | + @login_required |
| 58 | + def admin_index(): |
| 59 | + if current_user.is_admin: |
| 60 | + return 'Привет админ!' |
| 61 | + else: |
| 62 | + return 'Ты не админ!' |
| 63 | + |
18 | 64 | return app
|
0 commit comments