Python--Flask学习(一)--urls和视图

it2022-05-05  118

1、debug模式

from flask import Flask app = Flask(__name__) # @app.route是一个装饰器 # @开头,并且在函数上面,说明是装饰器,这个装饰器的作用,是做一个url与视图函数的映射 @app.route('/') def hello_world(): return 'Hello World!' # 如果当前这个文件是作为入口程序运行,那么就执行app.run() if __name__ == '__main__': app.run(debug=True)

(1)设置debug模式

在app.run()中传入一个参数debug, app.run(debug=True)就是设置当前项目为debug模式; (2)debug模式的两大功能

当程序出现错误时,可以在页面看到错误信息和出错的位置;只要修改了项目中的python文件,程序会自动加载,不需要手动启动服务器;

2、config

(1)新建一个config.py文件; (2)在主app文件中导入这个文件,并配置到app中,示例代码如下:

import config app.config.from_object(config)

(3)还有一些其它的参数也是放在这个文件中的;

url传参到视图

(1)参数的作用 可以在相同的url制定不同的参数,来加载不同的数据; (2)在flask中如何使用参数

@app.route('/article/<id>') def article(id):#视图函数 return "你请求的参数为:%s" %id

注意:

参数需要放在两个尖括号中;视图函数中需要放和url中的参数同名的参数;

(3)参数的数据类型

如果没有指定具体的数据类型,那么默认就是使用’string’数据类型;'int’数据类型只能传递’int’类型;'float’类型数据只能传递’float’类型;'path’数据类型和’string’有点类似,都是可以接受任意的字符串,但是’path’可以接受路径,也就是说可以包含斜杠; @app.route('/search/<path:article_id>') def search(article_id): return article_id

'uuid’数据类型只能接受符合’uuid’的字符串,'uuid’是全宇宙都唯一的字符串,一般可以用来作为表的主键;'any’数据类型可以在一个’url’中指定多条路径,如下代码: # /article/<id>/ # /blog/<id>/ @app.route('/<any(article,blog):url_path>/<id>/') def detail(url_path,id): if url_path == 'article': return '你请求的文章是: %s' % id else: return '你请求的博客是: %s' %id

反转url

(1)什么叫做反转url? 从视图函数到url的反转叫做反转url; (2)反转url的用处

在页面重定向的时候,会用到url反转;在模板中,也会用到url反转; from flask import Flask,url_for app = Flask(__name__) @app.route('/') def index(): print (url_for('my_list')) print (url_for('article',id='123')) 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(debug=True)

(3)url_for函数

url_for的基本使用

url_for的第一个参数是视图函数的名字的字符串,后面的参数就是传递给‘url’的,如果传递的参数之前在‘url’中已经定义了,那么这个参数会以‘path’的形式给‘url’。如果这个参数没有在‘url’中定义,那么将变成查询字符串的形式放在‘url’中;

url_for函数的用处 01、将来如果修改了‘url’,但没有修改url对应的函数名,就不需要到处去替换url了; 02、‘url_for’会自动的处理那些特殊的字符,不需要去手动处理。 from flask import Flask,url_for app = Flask(__name__) @app.route('/') def hello_world(): # return url_for('list',page=1,content=2) return url_for('login',next='/') @app.route('/list/<page>') def list(page): return 'my list' @app.route('/login') def login(): return 'login' if __name__ == '__main__': app.run()

(4)自定义url转换器

转换器是一个类,且必须继承来自werkzeug.routing.BaseConverter;在转换器类中,实现to_python(self,value)方法,这个方法的返回值,将会传递到视图函数中作为参数;在转换器类中,实现to_url(self,value)方法,这个方法的返回值,将会在调用url_for函数的时候生成符合要求的url形式。 代码如下: # 自定义url转换器 from flask import Flask,url_for from werkzeug.routing import BaseConverter app = Flask(__name__) # 在一个url中含有手机号的变量,必须限定这个变量的字符串格式满足手机号码的格式 class TelephoneConverter(BaseConverter): regex = '1[34578]\d{9}' # 用户在访问posts/a+b/(自定义一个url转换器的话,可以不用在视图函数里面进行分割) class ListConverter(BaseConverter): def to_python(self, value): return value.split('+') # join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 # 语法:str.join(sequence) def to_url(self, value): return "+".join(value) app.url_map.converters['tel'] = TelephoneConverter app.url_map.converters['list'] = ListConverter @app.route('/') def hello_world(): print(url_for('posts',boards=['a','b'])) return 'Hello World!' @app.route('/telephone/<tel:my_tel>/') def my_tel(my_tel): return '你的手机号是 %s' %my_tel @app.route('/posts/<list:boards>/') def posts(boards): return '你提交的板块是:%s' % boards if __name__ == '__main__': app.run(debug = True)

页面跳转和重定向

(1)重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面,比如用户访问了一个需要权限的页面,但是该用户并没有登录,因此我们应该给他重定向到登录页面。

永久性重定向:‘http’的状态码是’301’,多用于旧网址被废弃了要转到一个新的网址确保用户的访问;暂时性重定向:‘http’的状态码是’302’,表示页面的暂时性跳转,比如用户访问了一个需要权限的页面,但是该用户并没有登录,因此我们应该给他重定向到登录页面。 (2)flask中有一个函数叫redirect,可以重定向到指定页面,它通常和url_for函数一起使用,示例代码如下: from flask import Flask,redirect,url_for 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)

最新回复(0)