Python学习笔记--15、Web 开发

1、HTTP

浏览器的启用的过程: 下面是廖老师对这个简单的分析:

跟踪了新浪的首页,我们来总结一下HTTP请求的流程:

步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

方法:GET还是POST,GET仅请求资源,POST会附带用户数据;

路径:/full/url/path;

域名:由Host头指定:Host: www.sina.com.cn

以及其他相关的Header;

如果是POST,那么请求还包括一个Body,包含用户数据。

步骤2:服务器向浏览器返回HTTP响应,响应包括:

响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;

响应类型:由Content-Type指定;

以及其他相关的Header;

通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

关于http 格式:

其中   在最最重要的一点就是

每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。

那么是如何选呢  有两种请求的方式,一种是get  一种是post 的方式

 

2、 HTML 简介

<html>
<head>
  <title>Hello</title>
</head>
<body>
  <h1>Hello, world!</h1>
</body>
</html>

上面就是最简单的html 代码的结构

输出的结果是什么呢?

(1) CSS  介绍

CSS(Cascading Style Sheets) , css表示了HTML 中控制所有的元素是如何展现的,也就是我们所说的前端的代码 的写法,  我们还可以修改这个代码,使得Hello world更好看一些呢?

<html>
<head>
  <title>Hello</title>
  <style>
    h1 {
      color: #333333;
      font-size: 48px;
      text-shadow: 3px 3px 3px #666666;
    }
  </style>
</head>
<body>
  <h1>Hello, world!</h1>
</body>
</html>

 

 

(2)JavaScript简介

每一次看到JavaScript 就以为和java 有关, 廖老师说这个东西 和java  一点关系都没有,这我就很放心了,按照老师的说法, JavaScript 的功能是为了将HTML 具有交互性而作为脚本语言添加的

<html>
<head>
  <title>Hello</title>
  <style>
    h1 {
      color: #333333;
      font-size: 48px;
      text-shadow: 3px 3px 3px #666666;
    }
  </style>
  <script>
    function change() {
      document.getElementsByTagName('h1')[0].style.color = '#ff0000';
    }
  </script>
</head>
<body>
  <h1 onclick="change()">Hello, world!</h1>
</body>
</html>

 

老师推荐的学习网站如下:

讲解HTML、CSS和JavaScript就可以写3本书,对于优秀的Web开发人员来说,精通HTML、CSS和JavaScript是必须的,这里推荐一个在线学习网站w3schools:

http://www.w3schools.com/

以及一个对应的中文版本:

http://www.w3school.com.cn/

 

3、WSGI 接口

WSGI:Web Server Gateway Interface。 这个东西到底是干嘛用的呢?????  如说我们要写一个web 的应用程序, 那么实际上我们需要以下几个步骤:

1、通过浏览器发送一个HTTP请求

2、服务器受到请求之后,生成HTML文档

3、服务器将HTML的文档作为HTTP相应的Body 发送给浏览器(也就是我们看到的内容了)

4、浏览器受到HTTP响应,从HTTP body 中将所有的需要显示的数据 读取出来并且显示。

那,这就麻烦了,如果我们还需要对底层的传输的啊  以及收到的数据进行各种 读取什么的  所以我们的方案 就是最好通过,对应的接口,我们只需要利用 python  关心他们上面的  业务逻辑就好啊 

 

对于这个接口 的定义是比较简单的,我们看下面的这个例子把

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, web!</h1>']
  • 需要接收下面这两个参数:

  • environ:一个包含所有HTTP请求信息的dict对象;

  • start_response:一个发送HTTP响应的函数。

在 start_response 中, 就发送了响应的头部(只会发送一次),也就是我们只能调用一次这个函数,第一个是返回响应码,200  也就是表示 是 可以正常访问,第二个参数,表示的是http header 部分。  最后,我们使用return 作为最后返回的参数。

通过start_response()发送Header,最后返回Body。

好消息是Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。

 

运行WSGI 服务:

首先编写hello.py

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, web!</h1>']

 

然后,再编写一个server.py,负责启动WSGI服务器,加载application()函数:

# server.py
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from hello import application

# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever(

注意:如果8000端口已被其他程序占用,启动将失败,请修改成其他端口。

启动成功后,打开浏览器,输入http://localhost:8000/,就可以看到结果了:

 

下面是运行结果:

 

 

 

4、使用WEB框架

由于用Python开发一个Web框架十分容易,所以Python有上百个开源的Web框架。这里我们先不讨论各种Web框架的优缺点,直接选择一个比较流行的Web框架——Flask来使用。

 

 

代码如下:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    return '<h1>Home</h1>'

@app.route('/signin', methods=['GET'])
def signin_form():
    return '''<form action="/signin" method="post">
              <p><input name="username"></p>
              <p><input name="password" type="password"></p>
              <p><button type="submit">Sign In</button></p>
              </form>'''

@app.route('/signin', methods=['POST'])
def signin():
    # 需要从request对象读取表单内容:
    if request.form['username']=='admin' and request.form['password']=='password':
        return '<h3>Hello, admin!</h3>'
    return '<h3>Bad username or password.</h3>'

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

 

 

上面中的内容用到了装饰器,这个时候,就有必要从新复习一下,装饰器 是什么东西了。

复习装饰器 是干嘛的

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000

这个链接,就是廖老师之前对装饰器进行的解释

 

下面从新进行简单的说明好了

 def now():
...     print('2015-3-25')

假设我们现在有一个函数,now(), 但是我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

 

 

简单来说,就是我从新编写了一个函数,让它在执行@func 之前,提前先执行一下 @的这个函数  这样就能不改变now 的定义的方式。

5、使用模板

Web框架把我们从WSGI中拯救出来了。现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了。

那是不是手工写函数,把html 写出来,随便选择一个网页 按一下F12  相信大家看到的源码 都不会比较少,所以肯定是有更简单和方便的方式用来进行源码的开发。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值