一、flask介绍
1.什么是flask?
- Flask是一个基于Python并用Python编写的Web应用程序框架
flask框架模式:MTV模式
- M :Models ,模型层,负责数据库建模
- T :Templates ,模板层,用于处理用户显示的内容,如:html
- V :Views ,视图层,处理与用户交互的部分内容。处理用户的请求并给出响应
2.flask的两个核心
Werkzeug(路由模块):
它是一个WSGI工具包,它实现了请求,响应对象和实用函数。这使得能够在其上构建web框架。Flask框架使用Werkzeug作为其基础之一。
jinja2:
jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。
3.flask与Django的区别
Django 是一个重量级的框架,Flask是一个轻量型的框架;那么Django框架他到底重在哪呢?对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。
而Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。flask不会帮你去做选择。
二、使用方法
1.创建flask框架
在pycharm专业版中是可以直接创建的,可以直接新建一个flask项目,编译器会帮你创建好static文件,templates文件和app.py文件。
直接一个完整的flask框架就给你创建好了,我们便可以直接使用了。
2.flask路由
(1).什么是路由(route)?
- 客户端将请求发送给web服务器,web服务器再将请求发送给flask程序实例
- 程序实例需要知道每个url请求要运行哪些代码,所以需要建立一个 url 到 python 函数的映射
简单点说就是通过用户访问的路径,匹配相应的函数
(2).路由的使用
基本使用方法:
@app.route('/')
def hello_world():
return '你好!'
@app.route('/index') #\index 访问路径,用户通过什么方式访问
def hello():
return "你好!"
单引号中的内容就是我们的访问路径
获取字符串参数的使用:
@app.route('/user/<name>') #获取参数内容
def welcome(name):
return "你好!,%s"%name
我们进入网页输入路径后所带的字符串参数,便会输出出来
获取整型参数的使用:
@app.route('/user/<int:id>') #获取参数内容
def welcome1(id):
return "你好!,%d 号的会员"%id
同样也是在打开是后边加上整型参数,会在我们网页中显示出现。就不多做演示
3.渲染网页
@app.route('/')
def index2():
return render_template("index.html")
我们需要导入一个包
from flask import Flask,render_template
加上我们后边的render_template,就可以使用render_template方法返回渲过后的网页,进行展示
我们会打开一个“index.html“的网站,会显示被渲染后的网站页面
同时我们还可以向页面传递一些变量:
@app.route('/')
def index2():
time = datetime.date.today() #普通变量
name = ["小张","小王","小李"] #列表类型
tesk ={"任务":"打扫卫生","时间":"三小时"} #字典类型
return render_template("index.html",var = time,list = name,tesk =tesk)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
今天是{{ var }}欢迎光临。<br>
今天值班的有:<br>
{% for data in list %} <!--用大括号和百分号括起来的是控制结构,还有if-->
<li>{{ data }}</li>
{% endfor %}
任务:<br> <!--了解一下如何在页面中打印表格,以及如何迭代-->
<table border="1">
{% for key,value in tesk.items() %} <!--tesk.items()) :迭代器,将字典转换成[(key,value),(key,value),(key,value)]格式的列表-->
<tr>
<td>{{key}}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
上边分别是传递普通变量,列表变量和字典变量
在HTML文件中,传递变量是使用{{ }}的方式进行传递的
for循环语句则是:
{% for data in list%}
<内容>
{% endfor%}
#表单提交
@app.route('/test/register') #路径,test前面需要加上/
def register():
return render_template("test/register.html") #当前templates文件夹下边的文件结构
#接收表单的路由需要指定methods为POST
@app.route('/result',methods=['POST'])
def register1():
if request.method=='POST':
result = request.form #将表单里的内容形成一个字典,传给result
return render_template("test/result.html",result = result)
还可以进行表单提交
当然我们需要建立两个HTML文件,然后在一个中书写表单内容,以及提交跳转链接到的第二个网页中。
需要注意的是,我们默认的请求方式是get,但是我们接收表单的请求方式是post ,所以记得要将其更改为post
同时还有一个注意点:我们跳转的网页一般都不会使用静态的自己输入网址,我们一般是使用反路由:url_for() 自动生成网页。
三、学习心得
通过学习了flask基础用法,同时查阅了许多资料,也通过了一些例子进行实验,了解到我们可以通过将自己的html文件,或者下载的HTML文件,可以导入在我们flask文件中成为模板,然后我们可以通过本地服务器网址打开我们的网页,但是无法让其他人浏览网页。如果配置了服务器的话便可以让其他用户进行访问。