本例子用到了 Flask+蓝图+Flask-Login+SQLAlchemy+WTForms+PyMySQL相关架构html
Flask是微型web框架,框架自己十分精简,微型并不表明其功能弱,核心代码基于Werkzeug, Jinja 2 这两个库,它以插件形式的进行功能扩展,且插件易于安装与使用,而且能够自行开发扩展插件python
与其余web框架相似,flask中请求(request),路由(route),响应(response)构成其完整的一个基本http流程。git
flask流行的主要缘由:github
在Flask项目中能够用Blueprint(蓝图)实现模块化的应用,使用蓝图可让应用层次更清晰,开发者更容易去维护和开发项目。蓝图将做用于相同的URL前缀的请求地址,将具备相同前缀的请求都放在一个模块中,这样查找问题,一看路由就很快的能够找到对应的视图,并解决问题了。web
蓝图提供模板过滤器、静态文件、模板和其它功能sql
Flask-Login 经过 user session,提供登陆的常见任务,好比登入 (logging in)、登出 (logging out) 和当前用户 (current user)shell
login_user() 函数:实现用户的登入,通常在登入的视图函数中调用数据库
logout_user() 函数:实现登出功能flask
current_user 属性:获取当前用户
对于使用者来讲,若是须要页面是受权用户才可见,在相应视图函数前加上 @login_required 装饰器进行声明便可,@login_required 装饰器对于未登陆用户访问,默认处理是重定向到 LoginManager.login_view 所指定的视图服务器
提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其余运行在web应用以外的命令行任务;使得脚本和系统分开;
Flask Script和Flask自己的工做方式相似,只需定义和添加从命令行中被Manager实例调用的命令;
WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。
简单代码例子:
class Myvalidators(object): '''自定义验证规则''' def __init__(self,message): self.message = message def __call__(self, form, field): print(field.data,"用户输入的信息") if field.data == "haiyan": return None raise validators.ValidationError(self.message) class LoginForm(Form): '''Form''' name = simple.StringField( label="用户名", widget=widgets.TextInput(), validators=[ Myvalidators(message="用户名必须是haiyan"),#也能够自定义正则 validators.DataRequired(message="用户名不能为空"), validators.Length(max=8,min=3,message="用户名长度必须大于%(max)d且小于%(min)d") ], render_kw={"class":"form-control"} #设置属性 ) pwd = simple.PasswordField( label="密码", validators=[ validators.DataRequired(message="密码不能为空"), validators.Length(max=8,min=3,message="密码长度必须大于%(max)d且小于%(min)d"), validators.Regexp(regex="\d+",message="密码必须是数字"), ], widget=widgets.PasswordInput(), render_kw={"class":"form-control"} ) @app.route('/login',methods=["GET","POST"]) def login(): if request.method =="GET": form = LoginForm() return render_template("login.html",form=form) else: form = LoginForm(formdata=request.form) if form.validate(): print("用户提交的数据用过格式验证,值为:%s"%form.data) return "登陆成功" else: print(form.errors,"错误信息") return render_template("login.html",form=form)
login.html
<body> <form action="" method="post" novalidate> <p>{{ form.name.label }} {{ form.name }} {{ form.name.errors.0 }}</p> <p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors.0 }}</p> <input type="submit" value="提交"> <!--用户名:<input type="text">--> <!--密码:<input type="password">--> <!--<input type="submit" value="提交">--> </form> </body>
SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。
ORM:将对对象的操做转换为原生SQL
优势
易用性,能够有效减小重复SQL
性能损耗少
设计灵活,能够轻松实现复杂查询
移植性好
示例代码
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Student(db.Model): s_id = db.Column(db.Integer, primary_key=True, autoincrement=True) s_name = db.Column(db.String(16), unique=True) s_age = db.Column(db.Integer, default=1) __tablename__ = "student"
其中:
Integer表示建立的s_id字段的类型为整形,
primary_key表示是否为主键
String表示该字段为字符串
unique表示该字段惟一
default表示默认值
autoincrement表示是否自增
github项目代码地址: 示例项目地址
项目运行效果截图