第一个Flask项目
创建后项目如下图
static存放静态文件,templates存放Jinja2模板,app.py是整个项目的入口文件
我们略微理解下app.py这里的代码
# 从flask这个包中导入Flask类
from flask import Flask
#使用Flask类创建一个app对象
#__name__:代表当前这个app.py模板
#1.以后出现bug,可以帮助我们快速定位
#2.对于寻找模板文件,有一个相对路径
app = Flask(__name__)
#创建一个路由和视图函数的映射
#https://www.baidu.com
#/home/user/。。。。
#这里单独一个/表示根路由
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
我们运行代码
进入网站查看
debug、host和port的配置
说明:
-
debug模式
- 开启debug模式后,只要修改代码后保存,就会自动重新加载,不需要手动重启项目
- 如果开发的时候,出现bug,如果开启了debug模式,在浏览器上就可以看到出错信息
-
修改host
- 主要作用:就是让其他电脑(包括任何可以联网的电子设备,比如手机,平板)能访问到我电脑上的flask项目
-
修改端口号
- 主要作用:如果5000端口被其他程序占用了,那么可以通过修改port来监听的端口号
URL与视图的映射
无参url
from flask import Flask
app = Flask(__name__)
# url:http[80]/https[443]//www.baidu.com:443/path
#url与视图:其实可以理解为path与视图
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/demo')
def china():
return 'Hello 中国'
if __name__ == '__main__':
app.run()
注意修改两个地方,一个是路径名,一个是函数名
有参url
带参数的url,将参数固定到了path中
@app.route('/demo2/<int:id>')
def demo2(id):
return '您携带的id是%s' % id
如果去掉int:
,则传入什么都行,加入后只能传入int
类型,否则会报错
查询字符串的方式传参
用这种方式需要用到request,先在开头引入
from flask import Flask,request
#/book/list:会给我返回第一页的数据
#/book/list?page=2:获取第二页的数据
@app.route('/book/list')
def book_list():
#arguments:参数
#request.args:类字典类型
page = request.args.get("page",default=1,type=int)
return f"你得到的是第{page}的信息"
Jinja2
模板渲染
现在template里新建html文件
在body里填入内容就可以显示在页面上
比如在body里写个你好,运行代码
那么我们如何把页面渲染给前端,用render_template
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
# return 'Hello World!'
return render_template("index.html")
if __name__ == '__main__':
app.run()
如何给html传参使用
模板访问对象属性
通过类传入数据
# app.py
class User:
def __init__(self,username,email):
self.username = username
self.email = email
@app.route('/')
def hello_world():
user=User(username="李四",email="123@qq.com")
person={
"username":"张三",
"email":"456@qq.com"
}
return render_template("index.html",user=user,person=person)
#index.html
<body>
这是传入的名字:{{ user.username }}
这是传入的邮箱:{{ user.email }}
<br>
{{ person['username'] }}
{{ person.username }}
{{ person['email'] }}
{{ person.email }}
</body>