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测试正常。

猜你喜欢

转载自blog.csdn.net/limaning/article/details/53725066