Python之Flask框架项目Demo入门

Python+Flask框架项目Demo入门

  本例子用到了 Flask+蓝图+Flask-Login+SQLAlchemy+WTForms+PyMySQL相关架构

Flask Web框架介绍

  Flask是微型web框架,框架本身十分精简,微型并不代表其功能弱,核心代码基于Werkzeug, Jinja 2 这两个库,它以插件形式的进行功能扩展,且插件易于安装与使用,并且可以自行开发扩展插件

与其他web框架类似,flask中请求(request),路由(route),响应(response)构成其完整的一个基本http流程。

flask流行的主要原因:

  1. 有非常齐全的官方文档,上手非常方便
  2. 有非常好的拓展机制和第三方的拓展环境,工作中常见的软件都有对应的拓展,自己动手实现拓展也很容易
  3. 微型框架的形式给了开发者更大的选择空间

蓝图介绍

  在Flask项目中可以用Blueprint(蓝图)实现模块化的应用,使用蓝图可以让应用层次更清晰,开发者更容易去维护和开发项目。蓝图将作用于相同的URL前缀的请求地址,将具有相同前缀的请求都放在一个模块中,这样查找问题,一看路由就很快的可以找到对应的视图,并解决问题了。

  蓝图提供模板过滤器、静态文件、模板和其它功能

Flask扩展库

Flask-Login库

  Flask-Login 通过 user session,提供登录的常见任务,比如登入 (logging in)、登出 (logging out) 和当前用户 (current user)

  login_user() 函数:实现用户的登入,一般在登入的视图函数中调用

  logout_user() 函数:实现登出功能

  current_user 属性:获取当前用户
  对于使用者来说,如果需要页面是授权用户才可见,在相应视图函数前加上 @login_required 装饰器进行声明即可,@login_required 装饰器对于未登录用户访问,默认处理是重定向到 LoginManager.login_view 所指定的视图

Flask-Script库

  提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;

  Flask Script和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令;

WTForms表单

  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是一个很强大的关系型数据库框架,支持多种数据库后台。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项目代码地址: 示例项目地址

项目运行效果截图

Python之Flask框架项目Demo入门

上一篇:Python Flask框架入门


下一篇:C++ 容器:顺序性容器、关联式容器和容器适配器