windows python web route 路由

简介: windows python web route 路由

windows python web route 路由

tags: flask

文章目录

1. 路由介绍

路由是指用户请求的URL与视图函数之间的映射。Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器。

可见路由表在Flask应用中处于相当核心的位置。路由表的内容是由应用开发者填充。


route装饰器 :可以使用Flask应用实例的route装饰器将一个URL规则绑定到 一个视图函数上。

2. 路由类型

2.1 一般路由url

第一种:没有名字的路由

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

访问:http://127.0.0.1:5000/

第二种,定义一个名字

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

访问:http://127.0.0.1:5000/hello

第三种:一个函数多个url路由规则

@app.route('/')
@app.route('/hello')
@app.route('/hello/<name>')
def hello(name=None):
    if name is None:
        name = 'World'
    return 'Hello %s' % name

访问:http://127.0.0.1:5000/

访问:http://127.0.0.1:5000/hello

访问:http://127.0.0.1:5000/hello/xiaoaming

访问:http://127.0.0.1:5000/ligang


第四种:add_url_rule()定义一个路由url

route装饰器内部也是通过调用add_url_rule()方法实现的路由注册

def hello():
  return 'Welcome to Hello World !'
app.add_url_rule('/hello',view_func=hello)

访问:http://127.0.0.1:5000/hello

2.2 带参数的路由url

@app.route('/hello/<name>')
def hello(name):
    return 'Hello %s' % name

name为随意字符串,结果输出:

1832b220aa754cd18c504acc7686a560.png

除了界面验证,我们也可以用命令行工具ipython测试:

pip install ipython  #安装
ipython   #进入ipython
In [1]: import requests
In [2]: r = requests.get("http://192.168.1.4:5000/hello/zong")
In [3]: r.text
Out[3]: u'Hello zong'

参数是有类型的。默认是string

传递参数的语法是/<参数类型:参数名称>/,然后在视图函数中也要定义同名的参数


string:只接受字符串,没有任何“/或者”的文本

int:只接受整数

float:只接受浮点数,整数都不行哈

path:和string类似,但是接受斜杠

uuid:只有接受符合uuid的字符赤岸,一般用作表的主键

any:可以指定多种路径

示例:

rom flask import Flask,request
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello World!'
@app.route('/list/')
def article_list():
    return 'article list!'
@app.route('/p1/<article_id1>')
def article_detail(article_id1):
    return "请求的文章是:%s" %article_id1
@app.route('/p2/<string:article_id2>')
def article_detail2(article_id2):
    return "请求的文章是:%s" %article_id2
@app.route('/p3/<int:article_id3>')
def article_detail3(article_id3):
    return "请求的文章是:%s" %article_id3
@app.route('/p4/<path:article_id4>')
def article_detail4(article_id4):
    return "请求的文章是:%s" %article_id4
# import uuid
# print(uuid.uuid4())
@app.route('/p5/<uuid:article_id5>') #数据的唯一性,长度较长,有损效率(一般在用户表中使用)6a9221f6-afea-424a-a324-8ceaa5bdfc98
def article_detail5(article_id5):
    return "请求的文章是:%s" %article_id5
@app.route('/p6/<any(blog,user):url_path>/<id>/')
def detail(url_path,id):
    if url_path == "blog":
        return "博客详情 %s" %id
    else:
        return "用户详情 %s" %id
#通过问号形式传递参数
@app.route('/d/')
def d():
    wd = request.args.get('wd') #获取浏览器传递参数
    return '通过查询字符串的方式传递的参数是,%s'%wd #请求http://127.0.0.1:8080/d/?wd=php
if __name__ == '__main__':
    app.run()

2.3 带url_for传参的路由url

对url再次包装处理。


url_for的第一个参数是视图函数的函数名对应的字符串(endpoint),后面的参数就是你传递给url;如果传递的参数在url中已经定义了,那么这个参数就会被当成path的值传递给url;如果这个参数没有在url中定义,那么将变成查询字符串的形式。

语法格式:

url_for('login')    # 返回/login
url_for('login', id='1')    # 将id作为URL参数,返回/login?id=1
url_for('hello', name='man')    # 适配hello函数的name参数,返回/hello/man
url_for('static', filename='style.css')    # 静态文件地址,返回/static/style.css

示例1

from flask import Flask,url_for,request
@app.route('/')
    return url_for('my_list',page=1,count=2) #这样的话就会在页面上构建出/post/list/1/?count=2的信息
@app.route('/post/list/<page>/')
def my_list():
    return 'my list'

示例2:

from flask import Flask,url_for,request
@app.route('/')
def hello_world():
    return url_for('login',next='/current') #页面返回/login/?next=%2Fcurrent登录前的信息
    # print(url_for('my_list',page=1,count=200))
    # return 'hello world'
@app.route('/login/')
def login():
    # next = request.args.get('next') #登录前的信息,在登陆之后仍旧保持
    return 'login'
@app.route('/list/<page>')
def my_list():
    return 'my list'
@app.route('/detail/<id>/')
def detail():
    return 'detail'
if __name__ == '__main__':
    app.run(debug=True)

2.4 不同http方法的路由url

当设置请求方式只能是POST时,GET就会报错。

@app.route('/hello/<name>',methods=["POST"])
def hello(name):
    return 'Hello %s' % name

测试:

In [1]: import requests
In [2]: r = requests.get("http://192.168.1.4:5000/hello/zong")
In [3]: r.text
Out[6]: u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\n'
In [7]: r.status_code
Out[7]: 405
In [8]: r = requests.post("http://192.168.1.4:5000/hello/zong")
In [9]: r.text
Out[9]: u'Hello zong'
In [10]: r.status_code
Out[10]: 200

如何想两种http方法都支持。

from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'This is a POST request'
    else:
        return 'This is a GET request'

参考:

相关文章
|
3月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
297 1
|
1月前
|
SQL 关系型数据库 数据库
优化Web开发流程:Python ORM的优势与实现细节
【10月更文挑战第4天】在Web开发中,数据库操作至关重要,但直接编写SQL语句既繁琐又易错。对象关系映射(ORM)技术应运而生,让开发者以面向对象的方式操作数据库,显著提升了开发效率和代码可维护性。本文探讨Python ORM的优势及其实现细节,并通过Django ORM的示例展示其应用。ORM提供高级抽象层,简化数据库操作,提高代码可读性,并支持多种数据库后端,防止SQL注入。Django内置强大的ORM系统,通过定义模型、生成数据库表、插入和查询数据等步骤,展示了如何利用ORM简化复杂的数据库操作。
58 6
|
29天前
|
安全 网络协议 网络安全
Windows Server 2003 Web服务器搭建
Windows Server 2003 Web服务器搭建
|
2月前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
106 6
|
29天前
|
网络协议 Windows
Windows Server 2019 Web服务器搭建
Windows Server 2019 Web服务器搭建
|
2月前
|
缓存 中间件 网络架构
Python Web开发实战:高效利用路由与中间件提升应用性能
在Python Web开发中,路由和中间件是构建高效、可扩展应用的核心组件。路由通过装饰器如`@app.route()`将HTTP请求映射到处理函数;中间件则在请求处理流程中插入自定义逻辑,如日志记录和验证。合理设计路由和中间件能显著提升应用性能和可维护性。本文以Flask为例,详细介绍如何优化路由、避免冲突、使用蓝图管理大型应用,并通过中间件实现缓存、请求验证及异常处理等功能,帮助你构建快速且健壮的Web应用。
27 1
|
2月前
|
SQL 缓存 数据库
构建高效Web应用:掌握Python中的ORM映射技术
在Web开发中,数据库操作至关重要,但直接编写SQL语句会增加代码复杂度并降低效率。对象关系映射(ORM)技术通过将对象模型映射为数据库表,使开发者能以面向对象的方式处理数据,提升开发效率和代码可维护性。本文以Python和SQLAlchemy为例,介绍ORM的基本概念、安装方法及使用技巧,并展示其在提升Web应用性能方面的优势。通过ORM,开发者可以简化数据库操作,专注于业务逻辑实现,提高开发效率和代码质量。
49 1
|
2月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
47 5
|
3月前
|
存储 数据库 开发者
Web2py的神秘力量:如何用Python打造快速原型设计与开发,让你的项目一鸣惊人?
【8月更文挑战第31天】在现代软件开发中,快速原型设计至关重要。Web2py作为一款Python Web框架,凭借其简洁的语法和高效开发流程受到开发者青睐。本文通过在线调查问卷系统的案例,展示Web2py在快速原型设计中的应用,包括需求分析、数据库设计、表单创建及路由实现,并提供示例代码,帮助读者理解其最佳实践。
24 1
|
3月前
|
开发者 Python
Web2py的神秘力量:如何用Python打造高效Web应用,让你一鸣惊人?
【8月更文挑战第31天】本文探讨了从热门的Django和Flask框架迁移到Web2py的过程,详细阐述了Web2py的三大优势:简单易学、快速开发与功能丰富。文章按步骤指导读者完成迁移,包括理解基本概念、编写迁移脚本、重构代码及测试调试,并提供了示例代码以展示Web2py的应用。此外,还分享了最佳实践建议,帮助开发者顺利过渡到Web2py,提升Web开发效率。
25 1
下一篇
无影云桌面