====== 第三十九章:Web应用项目 ======
===== 本章目标 =====
完成本章学习后,你将能够:
* 设计Web应用架构
* 实现用户认证
* 集成数据库
* 部署Web应用
===== 项目结构 =====
myapp/
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── views.py
│ ├── forms.py
│ └── templates/
├── config.py
├── requirements.txt
└── run.py
===== 用户认证 =====
from flask import Flask, request, session, redirect, url_for
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
app.secret_key = 'secret-key'
# 注册
@app.route('/register', methods=['POST'])
def register():
username = request.form['username']
password = generate_password_hash(request.form['password'])
# 保存到数据库
return redirect(url_for('login'))
# 登录
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user = get_user(username)
if user and check_password_hash(user.password, password):
session['user_id'] = user.id
return redirect(url_for('dashboard'))
return 'Login failed'
# 登出
@app.route('/logout')
def logout():
session.pop('user_id', None)
return redirect(url_for('index'))
===== 数据库集成 =====
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(120))
===== 本章实战 =====
1. 构建Todo应用
2. 构建博客系统
3. 构建电商网站
下一章:[[python_course:chapter40|第四十章:自动化脚本]]