公司做网站可以用个人域名,免费网站风格,上海市工程建设协会网站,免费设计房屋的软件组织一个 Flask 项目通常需要遵循一定的结构#xff0c;以便代码清晰、可维护。下面是一个典型的 Flask 项目结构#xff1a;
my_flask_app/
│
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── views.py
│ ├── forms.py
│ ├── templat…组织一个 Flask 项目通常需要遵循一定的结构以便代码清晰、可维护。下面是一个典型的 Flask 项目结构
my_flask_app/
│
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── views.py
│ ├── forms.py
│ ├── templates/
│ │ ├── base.html
│ │ ├── index.html
│ └── static/
│ ├── css/
│ ├── js/
│ └── images/
│
├── migrations/
│
├── tests/
│ ├── __init__.py
│ ├── test_app.py
│
├── venv/
│
├── config.py
│
├── manage.py
│
├── requirements.txt
│
└── README.md目录和文件说明
app/
__init__.py: 初始化 Flask 应用注册蓝图和扩展。models.py: 数据库模型定义。views.py: 视图函数处理路由和请求。forms.py: 表单定义如果使用 Flask-WTF。templates/: HTML 模板文件。static/: 静态文件CSS、JavaScript、图像等。
migrations/
数据库迁移文件夹用于存储 Alembic 生成的迁移脚本。
tests/
测试代码文件夹。
venv/
虚拟环境文件夹。
config.py
配置文件存储应用配置变量。
manage.py
管理脚本用于启动应用和其他管理任务。
requirements.txt
依赖文件列出所有需要安装的 Python 包。
README.md
项目说明文件提供项目的基本信息和使用说明。 安装: pip install Flask-WTF 一. 在 forms.py中
# forms.pyfrom flask_wtf.file import (FileRequired, # 文件验证MultipleFileField, # 多文件字段FileAllowed, FileField, FileSize, # 文件字段 文件验证FileStorage
)
from wtforms.fields import simple # 导入字段
from wtforms import validators # 导入验证器
from wtforms import widgets # 导入组件
from wtforms.form import Form
from flask_wtf.form import FlaskForm, Form # 导入form 验证码
from flask_wtf import Form, RecaptchaField URL
from wtforms.fields import URLField
from wtforms.validators import url 文件
from flask_wtf import file # 文件
from flask_wtf import recaptcha # 验证码
from flask_wtf.file import (FileRequired, # 文件字段MultipleFileField # 多文件字段)class LoginForm(FlaskForm):username simple.StringField(用户名, validators[validators.Length(min4, max6, message长度只能是4~6位),validators.DataRequired(),validators.Regexp(r\d, message只能是数字)],widgetwidgets.TextInput())password simple.PasswordField(密码, validators[validators.Length(min6, message长度不能少于6位),validators.DataRequired()],widgetwidgets.PasswordInput())confirm simple.PasswordField(确认密码, validators[validators.Length(min6, message长度不能少于6位),validators.DataRequired(),validators.EqualTo(password,message密码不一致)],widgetwidgets.PasswordInput())submit simple.SubmitField(登录)class UserForm(FlaskForm, Form):username simple.StringField(用户名,[validators.Length(min4, max25, message长度最小不能少于4最大不能大于25),validators.DataRequired(message不能为空),validators.Regexp(r[A-Za-z0-9_\-\u4e00-\u9fa5])], widgetwidgets.TextInput(),render_kw{class: username})email simple.StringField(邮箱, [validators.Length(min6, max35)], widgetwidgets.EmailInput())password simple.PasswordField(密码, [validators.Length(min6, message长度不能少于6位),validators.DataRequired(message不可为空), ],widgetwidgets.PasswordInput())confirm simple.PasswordField(确认密码, [validators.Length(min6, message长度不能少于6位),validators.DataRequired(message不可为空),validators.EqualTo(password, message密码不一致)],widgetwidgets.PasswordInput())accept_tos simple.BooleanField(接受协议, [validators.DataRequired()], widgetwidgets.CheckboxInput())submit simple.SubmitField(登录, widgetwidgets.SubmitInput())class UploadForm(FlaskForm):file simple.FileField(文件, validators[file.FileRequired(), file.FileAllowed(jpg, png, gif,message只允许上传jpg, png, gif的图片格式)])multiple simple.MultipleFileField(多文件)submit simple.SubmitField(提交)class LinkForm(Form):url URLField(validators[url()])class SignupForm(Form):username simple.StringField(Username)recaptcha RecaptchaField()1. 导包 2. 登录 form 3. 字段验证 4. 用户form
5. 文件form 6. URL form 7. 验证码form # 待完成
二. 后端部分 # 导入 form# 路由 渲染到前端三. 前端部分
!-- 遍历form --