python,web編程(一)


自學web方向已經很久了,一直沒有弄清楚整個web開發的底層概念,秉着先知道如何做,再知道為什么這么做的原則,之前一直都是以實現某個功能為主去學習。現在為了弄清整個web開發的概念,看了廖大大的教程再結合之前自己接觸的web開發方面,頓時有一種豁然開朗的感覺,現在決定跟着教程走一遍。先附上教程鏈接:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432170876125c96f6cc10717484baea0c6da9bee2be4000 

 

首先一個web應用的本質就是先由瀏覽器發送一個http請求給服務器,服務器收到請求后生成一個HTML文檔然后將文檔加入body發回給瀏覽器,瀏覽器收到信息后顯示body。一般解析請求,接受請求,發送請求這些行為都是由apache,IIS,Nginx來做的,我們要做的就是生成html,這樣就是一個WSGI接口。

先搭建開發環境,根據教程使用的是python3+mysql,安裝相應的包

pip install aiohttp        #異步處理框架
pip install jinja2          #模板引擎
pip install aiomysql      #異步mysql驅動

整個webapp的骨架,就是通過異步IO,處理http請求,整個webapp監聽着端口的請求,每次服務器端接收到一個請求就建立一個子進程去響應這個請求,提取本地的html文件放入返回的http請求中的body中。而整個html文件的生成又涉及到MVC架構,V就是VIEW層,負責展示HTML,C是控制層,負責調度url,M是model層,負責處理數據。C通過URL調度model和view,生成一個html頁面。現在先根據教程寫一個web骨架:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import logging; logging.basicConfig(level=logging.INFO)

import asyncio, os, json, time
from datetime import datetime

from aiohttp import web

def index(request):
    return web.Response(body=b'<h1>Awesome</h1>')

@asyncio.coroutine
def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET','/',index)
    srv = yield from loop.create_server(app.make_handler(),'127.0.0.1',9000)
    logging.info('server started at http://127.0.0.1:9000...')
    return srv

loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

logging模塊負責生成日志,index函數負責響應http請求並返回一個html。aiohttp則是基於asyncio實現的HTTP框架。通過裝飾器@asyncio.coroutine將一個生成器扔給eventloop去執行,這個eventloop監聽本機ip的9000端口不斷接受請求進行處理。並通過add_route方法設定url為http://127.0.0.1:9000,將index返回的html顯示在這個url上。這是我理解的整個web骨架的原理 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM