mvc设计模式:视图、控制器、模型
**
第一块知识点:路由
**
路由获取信息的方法
@app.route('/user',methods=['GET/POST'])
路由传递参数的两种方法:
1.
@app.route('/users/<id>')
def user_id(id):
return 'hello user:'+:id
这里就访问xxx/users/123456
返回hello user123456
2.
def query_user():
id=request.args.get('id')
return 'query_user'+id
这里访问xxxxx/query_user?id=123456
返回hello user123456
反向路由:
from flask import Flask,request,url_for
@app.route('/query_url')
def query_url():
return 'query_url'+url_for('query_user')
第二块知识点:模板
通过python内部实现将hello world 字体变得更加好看
from flask import Flask,render_template
app=Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
#通过模板来
#在python中加入html,使得python代码难以维护,所以需要模板
if __name__ == '__main__':
app.debug = True
app.run()
第二种方法:传入模板实现
#第二种从python输入信息,传递给模板引型
app=Flask(__name__)
@app.route('/')
def hello_world():
content="hello world!"
return render_template('index.html',content=content)
#通过模板来
#在python中加入html,使得python代码难以维护,所以需要模板
if __name__ == '__main__':
app.debug = True
app.run()
这时html中
<h1>{{content}}<\h1>
模板传入的技巧
1.传入一个类
主函数定义路由
@app.route('/user')
def user_index():
user=User(1,'jikexueyuan')
return render_template("user_index.html",user=user)
定义一个类函数
class User(object):
def __init__(self,user_id,user_name):
self.user_id=user_id
self.user_name=user_name
html模板中的操作
<h1>hello {{user.user_name}}</h1>
这样就实现了,访问xxxx/user 输出用户名的操作
2.在模板中使用条件判断语句
1.现在主函数内写一个判断路由
@app.route('/query_user/<user_id>')
def query_user(user_id):
user = None
if int(user_id)==1:
user = User(1,'jikexueyuan')
return render_template("user_id.html",user = user)
2.类函数
class User(object):
def __init__(self,user_id,user_name):
self.user_id=user_id
self.user_name=user_name
3.html中书写判断语句
<body>
{%if user %}
hello {{user.user_name}}
{% else %}
no this user
{% endif %}
</body>
4.结果:
输入:xxxxx/query_user/1 返回:hello jikexueyuan
输入:xxxxx//query_user/其他数字 返回 no this user
3.模板的循环
1.书写循环的路由
@app.route('/users')
def user_list():
users = []
for i in range(1,11):
user=User(1,'jikexueyuan'+str(i))
users.append(user)
return render_template("user_list.html",users=users)
2.书写循环的html
<body>
{% for user in users %}
{{user.user_id}}..{{user.user_name}}<br>
{% endfor %}
</body>
输出:
1…jikexueyuan1
1…jikexueyuan2
1…jikexueyuan3
1…jikexueyuan4
1…jikexueyuan5
1…jikexueyuan6
1…jikexueyuan7
1…jikexueyuan8
1…jikexueyuan9
1…jikexueyuan10
4.模板的继承
1.书写路由
@app.route('/one')
def one_base():
return render_template("one_base.html")
@app.route('/two')
def two_base():
return render_template("two_base.html")
2.书写html实现继承
被继承的基类
<body>
<div>
<h1>Header 极客学院</h1>
</div>
{% block content %}
{% endblock %}
<div>
<h1>Footer 极客学院</h1>
</div>
</body>
两个继承基类的html文件
{% extends "base.html" %}
{% block content %}
<h2>这是第一页</h2>
{% endblock %}
{% extends "base.html" %}
{% block content %}
<h2>这是第二页</h2>
{% endblock %}
输入:xxxxx/one
输出:
Header 极客学院
这是第一页
Footer 极客学院
输入:xxxxx.two
输出:
Header 极客学院
这是第二页
Footer 极客学院
使用模板的继承,可以节约成本,一样的功能只需要在基类中写好即可。