Python Flask全流程全栈项目实战:构建一个在线书店

一、项目概述

我们将使用Python的Flask框架,构建一个功能齐全的在线书店。这个项目将覆盖全栈开发的各个方面,包括后端开发、前端开发、数据库设计和部署等。通过这个项目,你将深入了解如何使用Flask进行全栈开发,并掌握相关技能。

二、环境准备

首先,你需要安装Python和相关的库。建议使用Python 3.7或更高版本,并安装以下库:

  • Flask:轻量级的Web框架
  • Flask-SQLAlchemy:用于数据库操作
  • Flask-WTF:用于表单处理
  • Flask-Login:用于用户认证和会话管理

你可以使用pip进行安装:

bash复制代码
 pip install flask flask_sqlalchemy flask_wtf flask_login

三、项目结构

在开始编码之前,我们需要规划好项目的结构。以下是一个建议的项目结构:

lua复制代码
 /online_bookstore  
 
 |-- /static  
 
 |   |-- /css  
 
 |   |-- /js  
 
 |   |-- /images  
 
 |-- /templates  
 
 |   |-- index.html  
 
 |   |-- login.html  
 
 |   |-- register.html  
 
 |   |-- books.html  
 
 |-- /app.py  
 
 |-- /models.py  
 
 |-- /forms.py  
 
 |-- /config.py

四、数据库设计

我们使用Flask-SQLAlchemy来操作数据库。首先,在models.py中定义数据模型:

python复制代码
 from flask_sqlalchemy import SQLAlchemy  
 
 from flask_login import UserMixin  
 
 from werkzeug.security import generate_password_hash, check_password_hash  
 
   
 
 db = SQLAlchemy()  
 
   
 
 class User(UserMixin, db.Model):  
 
     id = db.Column(db.Integer, primary_key=True)  
 
     username = db.Column(db.String(64), unique=True, nullable=False)  
 
     password_hash = db.Column(db.String(128), nullable=False)  
 
     books = db.relationship('Book', backref='user', lazy='dynamic')  
 
   
 
     def set_password(self, password):  
 
         self.password_hash = generate_password_hash(password)  
 
   
 
     def check_password(self, password):  
 
         return check_password_hash(self.password_hash, password)  
 
   
 
 class Book(db.Model):  
 
     id = db.Column(db.Integer, primary_key=True)  
 
     title = db.Column(db.String(100), nullable=False)  
 
     author = db.Column(db.String(100), nullable=False)  
 
     year = db.Column(db.Integer, nullable=False)  
 
     genre = db.Column(db.String(50), nullable=False)  
 
     price = db.Column(db.Float, nullable=False)  
 
     user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

五、后端开发

app.py中,我们初始化Flask应用,配置数据库,并定义视图函数:

python复制代码
 from flask import Flask, render_template, redirect, url_for, flash, request  
 
 from flask_sqlalchemy import SQLAlchemy  
 
 from flask_login import LoginManager, login_user, logout_user, login_required, current_user  
 
 from forms import RegistrationForm, LoginForm, BookForm  
 
 from models import User, Book, db  
 
 from werkzeug.security import generate_password_hash, check_password_hash  
 
 from flask_login import login_required, current_user  
 
 from flask_mail import Mail, Message  
 
 import os  
 
 from dotenv import load_dotenv # take environment variables from .env.  
 
 load_dotenv() # taking environment variables from .env. file if present in the project root directory else ign