Web开发基础

需要了解的基本知识

  1. 什么是 Web 框架,它可以干嘛?
  2. 为什么有 Web 框架?
  3. 基于 Python 的 Web 框架有哪些?

What is a Web Framework by Jeff Knupp

写得很好,对web和web框架的介绍非常清晰明了。

Web应用框架,简称Web框架,是编写web-enable应用的方法。无论是简单的博客还是复杂的Ajax应用,每一个网页都是通过代码写成的。

How The Web Works

在了解Web框架之前,要先了解web是怎么工作的。在浏览器输入了一个URL,点击"Enter",这过程究竟发生了什么?

web servers and ... web servers

网页以HTML语言传送到浏览器(HTML是浏览器用的语言,用来描述网页的内容和结构)。将HTML发送到浏览器的应用叫做web server; 有一点容易引起混淆,应用所在的及其通常也被叫做web server.

归根结底,一个web application所做的只是将HTML发送到浏览器。无论这个应用有多么复杂。

web application是怎么知道要发送什么内容的呢?浏览器要求啥它就发送啥

HTTP

浏览器将网站从web server(or "application server")那里下载下来,使用的是HTTP协议(在编程语境下,协议指的是通信双方之间遵循的数据格式以及步骤)。HTTP协议是基于request-reposne模型。Client(浏览器)向web application 请求数据,web application 响应并返回浏览器请求的数据。

注意通信总是由client(浏览器)发起的 server无法发起连接冰箱浏览器主动发送数据。

HTTP方法

HTTP协议中每个message都有其对应的方法。不同的HTTP方法对应不同逻辑类型的客户端请求,反过来说意味着客户端要达到不同的目的。比如说,请求一个网页的HTML与提交表格,这两种不同的动作需要不同的方法。

HTTP GET

GET方法词如其名:从web server拿数据。GET毫无疑问是最常用的HTTP请求。接到GET请求,web application用做的仅仅是发送HTML. web application不能改变自身(比如GET请求不能够生成新的用户账户).正因如此,通常认为GET请求比较"安全"因为它们不能改变web application.

HTTP POST

出了看网页,有很多种与网站交互的方式。我们可以发送数据。POST请求通常携带用户输入的数据,需要web server采取某些行动。比如在网站上注册,输入个人信息,是通过POST来完成的。

GET不同,POST请求会导致web server变动;此外,POST请求不总是返回HTML页面到客户端。客户端通过响应代码response code来判断是否成功。

HTTP Response Codes

正常情况,web server返回200代码,意味着一切顺利。相应代码是3位数数字;每条响应,web server都要发送一个代码来说明这个请求的结果。200最长用于GET请求。POST请求常见204,意思是进行顺利但没什么可返回的。

需要注意POST请求也是发送到特定的URL的,可能与数据提交所在的URL不同。

Web Applications

HTTP GETPOST是最常用的方法,能够做许多事情。web application的职责就是接收HTTP请求,并作出HTTP响应,一般是返回请求的HTML;POST请求会需要web application做处行动,比如往数据库中添加一条记录。

Web Server Fatigue

随着web application复杂性增加,有一些需要解决的问题:

  1. 如何检查被请求的URL然后返回合适的网页?
  2. 怎么处理POST请求
  3. 怎么处理更复杂的概念,比如seesions, cookies
  4. 怎么增加application量级,处理上千的并发连接 显然,没人想要每一开发一款应用的时候都要解决这些问题。所以产生了一些专门处理HTTP协议中基础内容、能够解决上述问题的packages.但别忘了,它们的本质上是一样的,接受请求 - 做出HTTP应答,并返回HTML.

注意客户段的web框架是个完全不同的概念

Solving The Big Two: Routing and Templates

制造web application有两个最大的问题:

  1. 怎么知道哪些代码是处理某个被请求的URL?
  2. 如果动态生成HTML - 即从数据库中提取数据,将计算后的值或信息插入HTML

不同的框架有不同的解决方式。以Django和Flask为例。

MVC in Django

首先要体协Django中的MVC模式。Django采用MVC模式并要求代码同样应用此模式。MVC, "Model-View-Controller"将应用的不同人物进行逻辑上的区分。数据表由models展示;controllers包括应用的业务逻辑,并对models进行操作;Views拿到数据信息,动态生成HTML。

Routing in Django

NOTE 暂缺 专注在Flask上

Routing in Flask

通过route()decortor来实现

@app.route('/users/<id:int>')
def display_user(id):
  # ...

decorator 采用简化的正则表达来进行URLs和arguments(将/作为分隔符);通过<name:type>directive URL中的argument(变量?)被传到route()中; 镜头的URLs比如/info/about_us.html是这样来处理的@app.route('/info/about_us.html')

HTML Generation Through Templates

HTML模版有点类似于str.format(),动态的值先写着占位符,之后再根据str.format()中的arguments(参数?)进行替换。可以这样理解,整个网页是一个长字符串,一些花括号中包含着变量,在字符串末尾调用str.format(). Django和Flask用的模版都是用上述的方式。

模版不尽相同。Django对模版中代码的支持是比较基本的;而Jinja2几乎允许运行任意代码。Jinja2对模版生产的结果进行aggressive 缓存,所以后继如果参数一致的请求可直接从缓存中返回。

数据库交互 Database Interaction

Django 暂空 Flask没有相应的功能

Web框架总结

web框架的作用很明确:将处理HTTP请求和响应的基础代码隐藏起来;隐藏的程度取决于不同的框架。Django和Flask代表了两个极端。Django对于每个场景都有相应的内容,甚至是过于详尽;Flask把自己定为一个“微框架”,仅处理极少的网络应用功能,靠第三方packages来处理一些不十分常见的web框架任务。

最后再重申一次,Python的web框架本质是一样的:接收HTTP请求,调动相应的代码生成HTML,做出HTTP响应和内容。实际上绝大多数的server-side框架原理都是如此(出了JS框架)。

Change logs

2017.02.10 Initial Draft

results matching ""

    No results matching ""