---恢复内容开始---

对于大多数学过编程语言的人来说都知道大部分的编程语言都可以用来开发web运用,对于python来说也是可以的,不过对于web开发来说用python你可以选择

两个不同的框架,如果你想要的是那种全站是的开发,那么你就要了解Django,Django是Python语言编写的一个全栈式Web框架,可以帮助我们快速编写一个具

有数据库功能、增删查改、后台管理等功能的网站,下面对Django和flask进行对比:

Django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。

Flask:无socket,中间件(需要扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了

所以说如果你只需要一些很简单的功能,使用flask可能是个更好的选择,下面我们就开始介绍flask框架

一.flask框架的简单入门:

1.首先flask的安装:

对于没有安装flask的人来说,我们可以通过pip来安装,来安装flask你只需要在以管理员身份运行的cmd界面输入 py -3  -m pip install flask即可(我的python是3.7)

这个命令会链接到pypi网站下载安装的flask模块以及flask依赖的另外四个模块(werkzeug,marksafe,jinja2,itsdangerous)

2.简单的介绍:

下面我们来简单介绍一下flask,Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。flask是一种轻量级的框架他不向其他框架一样包含了数据库抽象层和表单验证等其他功能,但是flask框架却支持拓展来添加这些应用,flask虽然是一种微型框架,但不代表着他缺少某些功能,而是不会帮你做太多的决策,比如使用某种数据之类的,这些都是由自己在开发中自己决定。

3.flask的简单应用:

第一步:

就是要实例化一个flask:

from flask import Flask
#实例化Flask
app = Flask(__name__) #设置路由路径,当浏览器上是该地址是则调用该方法
@app.route('/')
def hello_world():
return 'Hello World!'
#用于调试改模块
if __name__ == '__main__':
app.run()

上面简单例子我们可以看到实例化flask中我之传入了当前模块的名字,但是其参数并不只是这一个,下面我们来简单的了解一下其传入的参数以及其意义

self, import_name, static_path=None, static_url_path=None,static_folder='static', template_folder='templates',instance_path=None, instance_relative_config=False,
root_path=None
以上就是实例flask的参数,下面来讲解以下这些参数的意义:

template_folder="template":template模板目录, 默认当前项目中的 templates 目录

root_path:主模块所在的目录的绝对路径,默认项目目录

在return render_template时会将上面两个进行拼接,找到对应的模板地址

static_folder="static":静态文件目录的路径 默认当前项目中的static目录

static_url_path="/static":访问静态文件路由地址 默认是"/"+static_folder

静态文件查找:

如:在根目录下创建目录,templates和static,则return render_template时,可以找到里面的模板页面;如在static文件夹里存放11.png,在引用该图片时,静态文件地址为:/xxxx/11.png

app=Flask(__name__,template_folder='templates',static_url_path='/xxxx')

在template中找到模板:

如在template文件中有一个名为index.html的模板

<html>
<head>
{% if title %} #{% %}这样代表控制语句,意思是如果有传入title变量,则显示title-microblog
<title>{{title}} - microblog</title>
{% else %}
<title>Welcome to microblog</title> #如果没有传入参数,则显示welcome to microblog
{% endif %} #这里大不同!!HTML里面的逻辑语句,需要用{% endif %} 来结束逻辑语句
</head>
<body>
<h1>Hello, {{user.nickname}}!</h1>
</body>
</html>

下面是使用模板并对模板进行绚烂:

from flask importrender_template
from app importapp @app.route('/')
@app.route('/index')
def index():
user = {'nickname': 'Miguel'} # fake user
return render_template("index.html",
title = 'Home',
user = user) #这里模块里的第一个user指的是html里面的变量user,而第二个user指的是函数index里面的变量user

render_template的功能是对先引入index.html,同时根据后面传入的参数,对html进行修改渲染。

instance_pathinstance_relative_config是配合来用的、


这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings.py')这种方式导入配置文件的时候会用到


instance_relative_config:默认为False,当设置为True时from_pyfile会从instance_path指定的地址下查找文件。


instsnce_path:用于指向另一个flask实例,指定from_pyfile查询文件的路径,不设置时,默认寻找和app.run()的执行文件同级目录下的instance文件夹;如果配置了instance_path(注意需要是绝对路径),就会从指定的地址下里面的文件

第二步:

绑定路由

绑定路由是为了能在你输入某个确定的地址后执行某个确定的视图函数,然后该视图执行的结果返回给wsgi服务器,然后产生想要的结果就像网站开发一样对于某一个特定的页面都会有一个对应的url地址,如下如所示,是一个执行流程

绑定路由有两种方法:

一种是使用route装饰器将一个url规则绑定在一个视图上函数上,例如:

@app.route('/index.html',methods=['GET','POST'],endpoint='index')
def index():
return 'Index'

另一种是使用Flask应用实例的add_url_rule()方法,例如:

def index():
return "Index" self.add_url_rule(rule='/index.html', endpoint="index", view_func=index, methods=["GET","POST"])
or
app.add_url_rule(rule='/index.html', endpoint="index", view_func=index, methods=["GET","POST"])
app.view_functions['index'] = index

下面来解释一下该方法传入的参数:

rule: 一个字符串格式的url规则,如:"/login". 注:就是从route方法中调用add_url_rule是传递的rule

view_func: 视图函数,当对应的endpoint名字被请求时需要调用的函数。注:如果时router方法点用的add_url_rule,则这个参数时router方法传递过来的

methods:是指定http的方法支持,其中两个参数代表两种方法都支持,默认只支持get方法

endpoint:访问点,在flask框架中并不是跟据url一步定位到对应的视图的而是要跟据其中的访问点来找到对应的视图

在Flask内部使用两张表维护路由:

url_map :维护URL规则和endpoint的映射

view_functions :维护endpoint和视图函数的映射。

以用户访问URL/home为例,Flask将首先利用url_map找到所请求URL对应的 endpoint,即访问点home,然后再利用view_functions表查找home这个访问点 对应的视图函数,最终匹配到函数home():

当没有定义其endpoint时其默认名是函数的名字

@app.route('/home')
def home():pass

当为其endpoint取了别名时:同时对应的了两张表也发生了变化

@app.route('/home',endpoint='whocare')
def home():pass

同时endpoint还可以通过使用url_for()来反向生成url

from flask import Flask, url_for

@app.route('/index',endpoint="xxx")
def index():
v = url_for("xxx")
print(v) #这里打印出来的跟返回去的是一样的
return "index"

当我们希望使用的url中传入某些参数从而方便我们跟据传入的参数的不同进行不同的处理时我们就需要匹配动态的url地址了

您可以通过使用标记部分向URL添加变量部分 <variable_name>。然后,您的函数将接收<variable_name> 作为关键字参数。或者,您可以使用转换器指定参数的类型<converter:variable_name>

下面通过简单的例子来进行说明:

@app.route('/user/<username>') 
def show_user_profile(username): # show the user profile for that user
return 'User %s' % username @app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id @app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return 'Subpath %s' % subpath

其中可传入的参数有:

@app.route('/user/<username>')   #常用的   不加参数的时候默认是字符串形式的
@app.route('/post/<int:post_id>') #常用的 #指定int,说明是整型的
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>') #path转换器允许 规则匹配包含/的字符串,除此之外其他转换器都默认不识别/
@app.route('/login', methods=['GET', 'POST'])

接下来的便是为对应的路由绑定对应的方法,然后便是运行了具体便不说了;

python的web运用的更多相关文章

  1. Python之Web框架Django

    Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址  Python 下载地址:https://www.pyt ...

  2. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  3. Python之Web前端jQuery扩展

    Python之Web前端: 一. jQuery表单验证 二. jQuery扩展 三. 滚动菜单 一. jQuery表单验证: 任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证 ...

  4. Python之Web前端Dom, jQuery

    Python之Web前端: Dom   jQuery ###Dom 一. 什么是Dom? 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它 ...

  5. python 实现web框架simfish

    python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...

  6. Python之Web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...

  7. 关于Python的web框架

    uliwebhttp://git.oschina.net/limodou/uliweb uliweb 吸取了其他框架的经验,集成了orm.总的来说一般.这个安装后有个exe文件,命令行工具.不绿色.个 ...

  8. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  9. Python的Web应用框架--Django

    一:简介 python的web框架有很多,个人查了一下,有Django.Pylons. Tornado.Bottle和Flask等,其中使用人数最多的是Django,而我学习Django也是因为ope ...

  10. Python搭建Web服务器,与Ajax交互,接收处理Get和Post请求的简易结构

    用python搭建web服务器,与ajax交互,接收处理Get和Post请求:简单实用,没有用框架,适用于简单需求,更多功能可进行扩展. python有自带模块BaseHTTPServer.CGIHT ...

随机推荐

  1. 第34章 授予类型 - Identity Server 4 中文文档(v1.0.0)

    授权类型是指定客户端如何与IdentityServer交互的方式.OpenID Connect和OAuth2.0规范定义了以下授权类型: Implicit Authorization code Hyb ...

  2. 第六讲 smart qq C#开发总结

    smart qqC#开发总结: 整个开发下来其实一点都不是很难,从一开始二维码 获取到最终的收发消息,基本上都是模拟浏览器的操作.都是基于http通讯.一下就是 本次新手学习http协议的最关键的一个 ...

  3. Java开发笔记(十一)常见的数学函数

    前面介绍了Java编程的四则运算,虽然提供了基础的加减乘除符号,但是数学上还有其它运算符号,包括四舍五入用到的约等号≍.求绝对值的“| |”.开平方的“√ ̄”,这些运算符形态各异,而且并非ASCII码 ...

  4. 数据结构(java版)学习笔记(三)——线性表之单链表

    单链表的优点: 长度不固定,可以任意增删. 单链表的缺点: 存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针). 要访问特定元素,只能从链表头开始,遍历到该元素 ...

  5. Adaptive Placeholders

    https://wisdmlabs.com/blog/create-adaptive-placeholders-using-css/ https://circleci.com/blog/adaptiv ...

  6. 监控工具之zabbix server3.4 部署配置

    [root@localhost src]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@localhost s ...

  7. 查询SQLSERVER执行过的SQL记录(历史查询记录)

    有的时候,需要知道近段时间SQLSERVER执行了什么语句,可以用下面的方法: SELECT TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.sta ...

  8. Android Studio撤销与SVN的关联

    为何会记录这一个问题,主要是在做项目的过程中出现了一个奇怪的现象,就是直接在文件目录下使用svn上传文件的话,可以看到该目录是与SVN相关联的,可是到了用Android Studio上传代码的时候却发 ...

  9. linux 大小写转化

    (1)sed: cat file | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' (2)tr: cat file | ...

  10. linux 硬盘满了如何处理(转)

    linux 硬盘满了如何处理 事件源于在服务器运行一个脚本程序… 好好的脚本突然报错,还以为脚本出现问题了.细看报错原因(具体报错信息已经忘记了),是没有可用空间.从没遇见过这个情况,怎么办呢? 一. ...