内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

URL知识点总结

2019-01-31 21:13 出处:清屏网 人气: 评论(0

本来打算新开一篇,但是太短了,就整合到这里了

第一个flask程序

from flask import Flask
import config

app = Flask(__name__)
app.config.from_object(config)

@app.route('/')       #定义一个路由
def hello_world():    #定义一个视图函数
    return 'Hello World!'


if __name__ == '__main__':
    app.run()
其中 config 文件时从配置文件中开启 debug
也可以在 app.run(debug=True) 这样开启 debug
因为后期链接数据库的配置卸载 config 中,所以这里使用配置文件开启 debug

这里有个坑,就是专业版的pycharm,创建一个flask项目的话 debug 要在 Configurations 下勾选 FLASK_DEBUG 不然开启不了

注意 在配置文件里 DEBUG 要大写

flask --URL

唯一URL

from flask import Flask
import config

app = Flask(__name__)
app.config.from_object(config)

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

#app.route('/hi/')
def hi_world():
    return 'hi World!'

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

url_for方法

用来反转 URL , url_for 这个方法的第一个参数是视图函数的名称,后面的是传递的参数,如果在视图函数中这个参数定义了,那么就会当成 path 传给这个 url ,如果没有定义,那么就会当成get请求,传入 url 中。

注意 url_for 会自动处理特殊字符,例如 /

当你访问 127.0.0.1/hello/ 的时候会 Not Found 但是访问 127.0.0.1/hi/ 不会,因为 127.0.0.1/hi/ 就相当于在访问的 127.0.0.1/hi 做了一个重定向,跳转到 127.0.0.1/hi/

URL传递参数

传递参数

传递参数的语法是: // 。然后再试图函数中,也要定义同名的参数。

get请求传递参数

@app.route('/get/')
def arg_get():
    wd = request.args.get('wd') #get请求参数
    return 'get请求的参数是%s' % wd

参数的数据类型

  1. 如果没有指定,那么默认就是 string
  2. 指定 int , float 就只能传递相应的数据类型
  3. path 类型,与 string 类型相似,但是可以传递路径,即可以出现 /
  4. uuid 类型,只接受uuid字符串,唯一的
  5. any 类型,可以指定多种路径,这个通过一个例子来说明
@app.route('/<any(blog,user):url_path>/<id>')
def detaol(url_path,id):
    if url_path=='blog':
        return '博客详情 %s' % id
    else:
        return '用户详情 %s' % id

意思就是,你可以选择传入的时 blog 还是 user

自定义URL转换器

自定义个url类型转换器

首先导入 from werkzeug.routing import BaseConverter 模块

ctrl+b进入源码,可以看到这里定义的 BaseConverter 类,下面的 PathConverter , NumberConverter 等,就是之前的参数数据类型都是继承了这个类,然后通过一些方法来定义的转换器,定义完成后加入到 DEFAULT_CONVERTERS 对应关系中。通过 app.url_map.converters['转换器名'] = 定义的转换规则 来加入到对应关系中

例1,定义一个简单的手机号码转换器

from flask import Flask
from werkzeug.routing import BaseConverter
import config

app = Flask(__name__)
app.config.from_object(config)

# 限定手机号码的格式
class TelConverter(BaseConverter):
    regex = r'1[85734]\d{9}'

#添加到转换器中
app.url_map.converters['tel'] = TelConverter

#使用定义的转换器
@app.route('/tel/<tel:my_tel>/')
def tel(my_tel):
    return 'your tel is %s' % my_tel

例2,定义一个按照规则分离出两个参数的转换器

介绍两种方法

to_python 方法:将传入的 value 返回到视图函数中做参数

to_url 方法:将传入的 value 调用url_for生成符合要求的url形式

然后定义一个转换器

class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split('+')
    def to_url(self, value):
        return '+'.join(value)
app.url_map.converters['list'] = ListConverter

@app.route('/')
def hello_world():
    url = url_for('postsa',broad=['a','b'])
    return url

@app.route('/posts/<list:broads>/')
def postsa(broads):
    return "your posts is %s"%broads

重定向

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

永久性重定向:_http的状态码是301,多用于旧网址就废弃了要转到一个新的网址确保用户的访问www.jingdong.com ---> www.jd.com

暂时性重定向:http的状态码是302,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向

在flask中,重定向是通过flask.redirect(location,code=302)这个函数来实现,location表示需要重定向的url,应该配合之前将的url_for()函数来使用,code表示采用那个重定向,默认是302即暂时性重定向,可以修改成301来实现永久性重定向

重定向方法

可以使用 redirect() 方法配合 url_for() 反转url来实现跳转

from flask import Flask,redirect,url_for
from datetime import datetime
app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'

@app.route('/login/<username>')
def login(username):
    if username=='admin':
        return "hello %s" % username
    else:
        return redirect(url_for("index")) #重定向到index

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

分享给小伙伴们:
本文标签: URL

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号