知识背景:Python 基础知识;零Flask框架基础。
Url 的认识:
Url协议分类
1、如果是http协议,那么浏览器会使用80端口。
2、如果是https协议,那么浏览器会使用443端口。
Url详解
1、一个url由以下几部分组成:
scheme://host:port/path/?query-string=xxx#anchor
其中:
- scheme:协议名
- host:主机名
- port:端口
- path:查找路径
- query-string:查询字符串
- anchor:锚点
web服务器和应用服务器以及web应用框架
-
: 1、web服务器:处理http请求,相应静态文件。(Apache, Nginx, IIS)。
- 2、应用服务器:处理逻辑,比如php,python的代码,不能通过web服务器,只能通过应用服务器,常见的应用服务器有uwsgi,tomcat(java用)等。
- 3、web应用框架:封装了常用web功能的框架(Flask,Django)(SSH(java用))等。
第一个Flask程序
# encoding : utf-8
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':#这行意思是:如果当前这个文件是作为入口程序运行的话,就执行app.run()
app.run()
Debug模式
启动方法:在app.run()中传入关键字参数’debug’。app.run(debug = True),就进入了Debug模式。
Debug 模式的两大功能:
- (1)当程序出现问题的时候可以在页面中查看到错误信息和出错的位置。
- (2)只要修改了项目中的‘.py’文件,程序就会自动加载,不需要手动重新启动服务器。
使用配置文件config.py
import config
app.config.from_object(config)
#然后在新建的config.py中设置
DEBUG=True#即可
#此外还有很多其他参数后期都是放在配置文件中,比如
SECRET_KEY=
SQLALCHEMY=
#后面会提到
Url传参数
-
参数的作用:
可以使用一样的url,但是可以指定不同的参数,来加载不一样的内容。
- 在Flask中的使用,以article为例:
@app.route('/article/<id>')
#↑参数需要放在'<>'中
def article(id):#←视图函数中需要放和url中的参数同名的参数
return u'您请求的参数是:%s' % id
反转Url
反转Url的作用:
- 1、在页面重定向的时候,一般会使用url反转
- 2、在模板中也会使用url反转。
一个小例子:
from flask import Flask , url_for
app = Flask(__name__)
@app.route('/')
def index():
#通过my_list这个名字指向my_list的url
print (url_for('my_list'))
#通过article这个名字和ABC这个id指向article在参数为ABC情况下的页面
print (url_for('article', id = 'ABC'))
return 'Hello, World!'
@app.route('/list/')
def my_list():
return 'list'
@app.route('/article/<id>')
def article(id):
return u'您所请求的参数是:%s' % id
if __name__ == '__main__':
app.run()
页面跳转和重定向
用处:在用户访问一些需要登录的页面的时候,可以让他重定向到登录页面。
# encoding : utf-8
from flask import Flask , url_for ,redirect
app = Flask(__name__)
@app.route('/')
def index():
#&&***重定向代码实现***&&
login_url = url_for('login')
return redirect(login_url)
#&&***重定向代码实现***&&
return '这是页面'
@app.route('/login')
def login():
return '这是登录页面'
@app.route('/question/<is_login>/')
def question(is_login):
if is_login == '1':
return '这是发布页面'
else:
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)