python的web运用
---恢复内容开始---
对于大多数学过编程语言的人来说都知道大部分的编程语言都可以用来开发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_path和instance_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运用的更多相关文章
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- Python之Web前端jQuery扩展
Python之Web前端: 一. jQuery表单验证 二. jQuery扩展 三. 滚动菜单 一. jQuery表单验证: 任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证 ...
- Python之Web前端Dom, jQuery
Python之Web前端: Dom jQuery ###Dom 一. 什么是Dom? 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它 ...
- python 实现web框架simfish
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
- Python之Web框架们
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
- 关于Python的web框架
uliwebhttp://git.oschina.net/limodou/uliweb uliweb 吸取了其他框架的经验,集成了orm.总的来说一般.这个安装后有个exe文件,命令行工具.不绿色.个 ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉 ...
- Python的Web应用框架--Django
一:简介 python的web框架有很多,个人查了一下,有Django.Pylons. Tornado.Bottle和Flask等,其中使用人数最多的是Django,而我学习Django也是因为ope ...
- Python搭建Web服务器,与Ajax交互,接收处理Get和Post请求的简易结构
用python搭建web服务器,与ajax交互,接收处理Get和Post请求:简单实用,没有用框架,适用于简单需求,更多功能可进行扩展. python有自带模块BaseHTTPServer.CGIHT ...
随机推荐
- [C# 设计模式] Adapter - 适配器模式(两种)
Adapter - 适配器模式 序 现实生活中,我们常用到适配器. 你当前打开我这篇文章的笔记本电脑,电源的另一边不正连着一块适配器吗? 你平时想将三口插座插进二口插座里面,不也需要一个适配器吗? 整 ...
- Oracle day05 建表_约束
表的创建 标准的建表语法 : CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... ); 使用子查询创建表的语法 CREA ...
- css中关于table的相关设置
一.设置好看的单边框表格 1.一种实现方式 分别给table标签和td标签设置不在同一方向的border属性,如下table设置‘左上’边框,td设置‘右下’边框.其他设置方式同样可以实现. tabl ...
- SAP MM ME21N 创建PO时报错 - Net price in CNY becomes too large –
SAP MM ME21N 创建PO时报错 - Net price in CNY becomes too large – 笔者所在的项目上,由于客户尚未正式大规模量产,在现阶段,所有的物料基本都是走费用 ...
- 从零学习Fluter(二):win10上环境搭建以及模拟器和真机调试
今天呢,又继续看了flutter 弗拉特 的东西,绝的这个东西绝对是比ReactNative更高一层次的,在2018年12月5好,flutter的第一个stale1.0发布了,我们在GitHub上可以 ...
- C++ 重点关键字
const 四种用法 1.修饰变量起到限定只读作用: void func(const int a, const string str) {...} const int* func(...) {...} ...
- MongoDB更需要好的模式设计 及 案例赏析
一 挑战 设计从来就是个挑战. 当我们第一次接触数据库,学习数据库基础理论时,都需要学习范式,老师也一再强调范式是设计的基础.范式是这门课程中的重要部分,在期末考试中也一定是个重要考点.如果我们当年 ...
- Ubuntu下面MySQL的参数文件my.cnf浅析
前几天刚接手一个MySQL数据,操作系统为Ubuntu 16.04.5 LTS, 数据库版本为5.7.23-0ubuntu0.16.04.1(APT方式安装的MySQL).这个操作系统下的MySQL ...
- Spring MVC 表单校验 (七)
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)和hibernate-validato ...
- IE8环境下的上传图片预览
今天做一个需要在IE浏览器上使用的信息录入项目,遇到了图片上传预览的问题,找了一些资料,最后使用了IE自带的滤镜做到了 <!--HTML IE8不支持opacity,只能使用双层,一层背景半透明 ...