Flask笔记:(Flask开发基础与入门)

Flask笔记:(Flask开发基础与入门)

MacOSsudo pip installflask

Flask,需要下载重要的三个包:Werkzeug,Jinja2,Flask。

  1. 路由和反向路由,

    路由:可以理解为:通过url转到另一个地址或者接口

源代码:

from flask import Flask
app = Flask(__name__)

@
app.route('/')
def hello_world():
    
return 'Hello World!'

if __name__ == '__main__':
    app.run()

顺利运行于http://127.0.0.1:5000/

 

@app.route('/doc')
def hello_doc():
    
return 'This is my first flask'

这段是仿上面的写的,也就是增加一个doc的路由(转到另一个接口),从http://127.0.0.1:5000/doc可以顺利访问。

@ app.route ( '/doc' , methods =[ 'GET' ])

如果不指定,默认的是GET方法,也可以这样修改为POST方法:

@ app.route ( '/doc' , methods =[ 'POST' ])

GET - 从指定的资源请求数据;POST - 向指定的资源提交要被处理的数据】

 

@ app.route ( '/users/<id>' )
def user_id (id):
    
return  'Hi User:' +id

<id>和函数的参数名称要一致:

http://127.0.0.1:5000/users/Ben  可正常访问,结果就是:Hi User:Ben。

 

换一种方式获取参数:(fromflask import Flask,request)

@ app.route ( '/q_user' )
def query_user ():
    id=request.args.get(
'id' )
    
return  'q_user:' +id

/q_user之后接?id=Kate:

http://127.0.0.1:5000/q_user?id=Kate  顺利访问:q_user:Kate

 

反向路由:可以理解为从地址反向导出url字符串:(from flask import Flask,request, url_for

@ app.route ( '/q_user' )
def query_user ():
    id=request.args.get(
'id' )
    
return  'q_user:' +id
@
app.route ( '/query_url' )
def getUrl ():
    
return  'The URL is:' +url_for( 'query_user' )

访问:http://127.0.0.1:5000/query_url  结果:The URL is:/q_user

其中url_for('query_user')就是得到/q_user字符串的方法。

 

 

Flask模板:

为了使HelloWorld字体变大,可以这样写:

@ app.route ( '/' )
def hello_world ():
    
return  '<h1>Hello World!</h1>'

但是python代码中加入html会混乱,更何况还有js等文件,所以使用模板。

templates文件夹下,创建hello.html

同时在python里面引入render_template方法:

@ app.route ( '/' )
def hello_world ():
    
return  render_template( "hello.html" )
    
# return '<h1>Hello World!</h1>'

render_template("hello.html") 即跳转指定文件。

-------------------------------

用这种方法操纵html内容:

html中,用双花括号语法包裹内容:body里面写内容:

<h2> { context_test  }} </h2>

py文件里:

@ app.route ( '/' )
def hello_world ():
    content = 
"This is from python"
    
return  render_template( "hello.html" , context_test =content)

即,通过双花括号内赋变量,实现调用python内容。

--------------------------------------

创建models.py,存放user:

class User ( object ):
    
def  __init__ ( self , user_id , user_name):
        
self .user_id = user_id
        
self .user_name = user_name

FlaskTest里导入这个类:

from  models  import  User

新建user.html输出user对象:

<h1> 你好, { user . user_name  }} </h1>

FlaskTest里:

@ app.route ( '/user' )
def user_index ():
    userNew = User(
1 'gamer' )
    
return  render_template( "user.html" , user  = userNew)

新建一个User对象,id1namegamer

http://127.0.0.1:5000/user  得到结果:你好,gamer

 

-------------------------------------------

添加if判断,如果有此用户,则返回某个值,如果没有此用户,则返回一个消息:

@ app.route ( '/query_user/<user_id>' )
def query_user (user_id):
    user_content = 
None
    
if  int (user_id) ==  1 :
        user_content = User(
1 , 'KangLeHealthy' )
    
return  render_template( "user_id.html" user  user_content)

 user_content对象赋给html中相应的对象。

user_id.html中添加如下代码:

{% if user %}
    
<h3>你好,{user.user_name }}</h3>
{% else %}
    
<h1>没有此用户</h1>
{% endif %}

访问:http://127.0.0.1:5000/query_user/1正常访问,你好,KangLeHealthy

访问:http://127.0.0.1:5000/query_user/2结果没有此用户

 

-------------------------------------------------------

循环语句:

@ app.route ( '/users' )
def user_list ():
    user_list = []
    
for  in  range ( 1 11 ):
        user = User(i
'NewUser' + str (i))
        user_list.append(user)
    
return  render_template( "user_list.html" , users  = user_list)

user_list.html:

{%  for  user  in  users  %}
    {
user . user_id  }}----{ user . user_name  }} <br>
{%  endfor  %}

访问:http://127.0.0.1:5000/users  得到结果:1----NewUser1

---------------------------------------------

模板继承:

---------------------------------------------

模板继承:

定义基类:(其他标准的H5默认内容不变)

<body>
    <h1>标题:PythonFlask测试</h1>
    <div>
        {% block content %}
        {% endblock %}
    </div>
    <h1>友情链接:学院网</h1>
</body>

注意,可变部分为中间div包裹的block块,语法是{%block %}--{%endblock%}

 

--定义子类:oneBase.html全部内容:

{% extends "base.html" %}       {# 这里继承基类 #}
{% block content %}
    <h2>首页,写入大体的内容</h2>
{% endblock %}

--定义子类:twoBase.html全部内容:

{% extends "base.html" %}       {# 这里继承基类 #}
{% block content %}
    <h2>细节,关于关键网站的内容</h2>
{% endblock %}

 

python写入路由:

@app.route('/one')
def oneBase():
    return  render_template("oneBase.html")

@app.route('/two')
def twoBase():
    return  render_template("twoBase.html")

 

访问http://127.0.0.1:5000/one测试正常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

limaning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值