flask框架总结(一)

,正如总所周知的一样,Flask是一个使用 Python 编写的轻量级 Web 应用框架。轻巧页就意味着他比较简洁,不过见到的MTV框架还是有的,(MVC)但是最重要的还是他的可扩展性很强,对比与Django框架呢,他的灵活度就很高了,可以自己一些设计代码框架。
他比较适合一些,分层比较少,逻辑不怎么复杂的web项目。
如果开发成本低的话,那就更适合了。
现在就总结下他的一些功能。
现在搭建个flask框架很简单了。
用pycharm创建项目的时候,选择flask,都直接给你把框架都生成好了的
在这里插入图片描述
从名称上可以看到,static文件夹里存放的都是些静态文件,比如:css,js,图片,视频,音频等。
templates就是存放些html文件咯。

一,路由Route

run.py可以看作处理路由以及配置的文件。
配置上:

app=Flask(
			__name__,
			template_folder='xxx',
			static_folder='xxx',
			static_url_path='/xxx'
		)

1.template_folder : 指定存放模板的文件夹的名称(默认为templates)
2.static_folder : 指定存放静态文件资源的文件夹的名称(默认为static)
注意:如果没有指定static_url_path的话,则访问路径和static_folder 的名称是一致的
3.static_url_path : 指定静态文件的访问路径
下面是设置IP地址端口和调试状态

app.run(debug=True,port=端口号,host='IP地址')

例:

@app.route('/register',methods=['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    else:
        uname =request.form['username']
        email=request.form['email']
        uurl=request.form['url']
        upwd=request.form['password']
        savetosql(uname,email,uurl,upwd)
        return return render_template('login.html')

上面这个例子大致意思就是如果是get请求访问xxxxx/register网页的话,就在浏览器上显示register.html页面。这里可以在注册页面的提交表单这是点击提交POST提交数据依旧到xxxxx/register这个路由上,由于是POST提交,就保存用户注册的信息到数据库,然后返回至登录界面。当然常规项目是需要做一些校验以及异常处理的。
@app.route(’/register’,methods=[‘GET’,‘POST’])这句话就控制着访问地址。
依次再举下带参数的路由

@app.route('/show/<name>') 
def show(name):
	print(name)

如果用户输入 XXX/show/aaa
那这个name=aaa

二,模板 Templates

模板中存放的都是html文件,这里呢,可以接收从路由中返回的参数。
在路由中用:return render_template(‘xxx.html’,变量1=值1,变量2=值2,… …)把参数传递给html文件
在html中用{{变量名}}来表示变量名所对应的值。
当然 输入的变量也可以用些过滤器去处理下。语法如下:
{{变量|过滤器(参数)}}
例:

@app.route('/01-selftemp')
def selftemp():
    name='aaaaa'
    pwd='i am happy'
    return render_template('test1.html',name=name,pwd=pwd)

===================================
test1.html中的部分代码

  <body>
    <h1>{{ name|capitalize }}</h1>
    <h1>{{pwd|title}}</h1>
    <h1>{{age|default('保密')}}</h1>
    </body>

运行结果:
在这里插入图片描述
常见的过滤器有:
capitalize 首字符变大写,其他变小写
lower 将值转换为小写
upper 将值转换为大写
title 将值中的每个单词首字符变大写
trim 去掉值两端的空格
default(‘xx’) 如果变量不存在,将采用default中的值作为默认输出
truncate(num[,bool]) 截取指定长度字符串,后面使用…显示

也有些简单的逻辑语句
if … else 结构
{% if 条件 %}

{% else %}

{% endif %}
for循环结构
{% for 变量 in 元组|列表|字典 %}

{% endfor %}
include标签,这个是用起来最舒服的,有点像提取基类的
{% include ‘header.html’%}
在其他html中引用这一句,就相当于把header.html中的代码全部粘贴到引用的位置一样,很舒服。
与它相对的有个叫extends的标签,这个和include很相似,语法是
{% extends ‘fater.html’ %},
这个也是相当于把fater.html中的代码复制过来,
两者的区别是包含是相当于复制其他页面作为自己的一个模块,
继承相当于把其他页面复制过来,再以这个为基础进行调整。(用block进行重写调整)
{% block 块名 %}
{% endblock %}
macro 标签 (宏) 这个标签有点像声明类一样。可以把一大段的判断逻辑全部提取到指定的html中封装起来,要只用的时候,就使用时
先导入类
{% import ‘macro.html’ as macros %}
再调用类中的方法
{{macros.方法名(参数)}}
在macro.html中则都是方法了
例如:

 {% macro show(list) %}
   {% for name in list %}
                    姓名:{{name}}
        {% endfor %}
{% endmacro %}

三,请求和 响应

一个web网站,请求响应是最频繁
常用的请求属性:
1.request.scheme : 获取请求协议
2.request.method : 获取本次请求的请求方式(GET / POST)
3.request.args : 获取以get请求方式提交的数据
4.request.form : 获取以post请求方式提交的数据
5.request.cookies:获取cookies中的相关信息
6.request.headers:获取请求信息头的相关信息
7.request.files:获取上传的文件
8.request.path:获取请求的资源具体路径(不带参数)
9.request.full_path:获取完整的请求资源具体路径(带参数)
10.request.url: 获取完整的请求地址,从协议开始
11.request.files 获取上传的文件用(save进行保存)
里面要注意低是arequest.args,request.form ,request.files 的返回值都是字典。
响应就是服务器响应给客户端的内容
响应的都是字符串, html文件也是字符串

四,模型 Models

模型是对应与业务数据所需要创建出来的数据存储模型,为了建立项目中的数据与数据表中的数据所对应而产生的。

而模型的框架有个ORM框架
基本流程是:
1,配置数据库的连接
app.config[‘SQLALCHEMY_DATABASE_URI’]=‘mysql://用户名:密码@地址:3306/表名’
2.创建数据库对象
db = SQLAlchemy(app)

创建数据库中的表的字段与项目中的参数一一映射。

class MODELNAME(db.Model):
				__tablename__ = "TABLENAME"
				COLUMN_NAME=db.Column(db.TYPE,OPTIONS)
				COLUMN_NAME=db.Column(db.TYPE,OPTIONS)
				... ...

1.MODELNAME:定义模型类的名称,尽量参考表名
2.TABLENAME:映射到数据库中表的名称
3.COLUMN_NAME:属性名,映射到数据表中列的名称
4.TYPE:映射到列的数据类型
5.OPTIONS:列选项,如:是否唯一,默认值,加索引…
db.TYPE 列类型如下:

类型名 python类型 说明
Integer int 普通整数,32位
SmallInteger int 小整数,16位
BigInteger int 不限精度整数
Float float 浮点数
Numeric deciaml.Decimal 定点数
String str 字符串
Text str 字符串
Boolean bool 布尔值
Date datetime.date 日期:年月日
Time datetime.time 时间:时分秒
DateTime datetime.datetime 日期和时间:年月日时分秒

OPTIONS 列选项:

选项名 说明
autoincrement 如果设置为True表示该列要自动增长
primary_key 如果设置为True表示该列为主键
unique 如果设置为True表示该列的值唯一
index 如果设置为True表示该列创建索引
nullable 如果设置为True表示该列允许为空,默认是非空 - False
default 为列指定默认值

例:

class Users(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(80),unique=True)
    age = db.Column(db.Integer,nullable=True)
    email=db.Column(db.String(200),unique=True)
    birth=db.Column(db.Date)
    isActive = db.Column(db.Boolean,default=True)

猜你喜欢

转载自blog.csdn.net/weixin_43778491/article/details/86661285
今日推荐