首页 > 代码库 > python成长之路17

python成长之路17

一:web框架的本质,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

1.1:python实现:

#!/usr/bin/env python#coding:utf-8import socketdef handle_request(client):    buf = client.recv(1024)    client.send("HTTP/1.1 200 OK\r\n\r\n")    client.send("Hello, Seven")def main():    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    sock.bind((‘localhost‘,8000))    sock.listen(5)    while True:        connection, address = sock.accept()        handle_request(connection)        connection.close()if __name__ == ‘__main__‘:    main() 

1.2:实现方式:

自己实现socket,Tornado

基于wsgi实现,Django

server_names = {    ‘cgi‘: CGIServer,    ‘flup‘: FlupFCGIServer,    ‘wsgiref‘: WSGIRefServer,    ‘waitress‘: WaitressServer,    ‘cherrypy‘: CherryPyServer,    ‘paste‘: PasteServer,    ‘fapws3‘: FapwsServer,    ‘tornado‘: TornadoServer,    ‘gae‘: AppEngineServer,    ‘twisted‘: TwistedServer,    ‘diesel‘: DieselServer,    ‘meinheld‘: MeinheldServer,    ‘gunicorn‘: GunicornServer,    ‘eventlet‘: EventletServer,    ‘gevent‘: GeventServer,    ‘geventSocketIO‘:GeventSocketIOServer,    ‘rocket‘: RocketServer,    ‘bjoern‘ : BjoernServer,    ‘auto‘: AutoServer,}

1.3:WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。
python标准库提供的独立WSGI服务器称为wsgiref。

#!/usr/bin/env python#coding:utf-8 from wsgiref.simple_server import make_server def RunServer(environ, start_response):    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])    return ‘<h1>Hello, web!</h1>‘    #路由系统根据用户请求的不同URL返回不同的页面if __name__ == ‘__main__‘:    httpd = make_server(‘‘, 8000, RunServer)    print "Serving HTTP on port 8000..."    httpd.serve_forever()

#执行结果:

技术分享

1.4:自定义一个web框架:

#!/usr/bin/env python#coding:utf-8from wsgiref.simple_server import make_server def index():    return ‘index‘ def login():    return ‘login‘ def routers():         urlpatterns = (        (‘/index/‘,index),        (‘/login/‘,login),    )         return urlpatterns def RunServer(environ, start_response):    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])    url = environ[‘PATH_INFO‘]    urlpatterns = routers()    func = None    for item in urlpatterns:        if item[0] == url:            func = item[1]            break    if func:        return func()    else:        return ‘404 not found‘     if __name__ == ‘__main__‘:    httpd = make_server(‘‘, 8000, RunServer)    print "Serving HTTP on port 8000..."    httpd.serve_forever()

1.4:MVC和MTV的区别:

 

MVC:Models:操作数据库Views:放置HTML模板Controllers 处理用户请求MTV:Models:操作数据库相关Temalate:放置HTML模板viers处理用户请求,Django就是这种模式

 

二:通过python实现web框架

2.1:安装python:

#pip3 install django #这是python 3.5.1的版本

 

2.2:设置环境变量:

技术分享

2.3:创建django project:

2.3.1#命令行方式:django-admin startproject mysite

2.3.2#图形方式:file-new project-Django-Create-新窗口打开

3:创建并启动app,app共享project里面的数据,app是用来响应用户请求的,每一个类型的网站就是一个app,相当于一个业务:

3.1:进入到project目录,执行命令python3 manage.py startapp cmdb启动创建一个app

 

3:1.2:写一个路由映射,写一个函数,只要url符合规则就执行函数,函数return一个值,这就是一个完整的url请求

3.1.3:配置index函数

3.1.4:启动app:

#命令启动:python manage.py runserver 127.0.0.1:8000

#图形启动1:先配置,右上角-edit configrations:

技术分享

#图形启动2,点运行:

技术分享

3.1.5:启动信息:

技术分享

3.1.6:访问页面:

技术分享

3.2:配置从html文件给用户返回,html在MTV架构里面要放在templates目录里面:

3.2.1:定义一个html文件:

3.2.2:配置返回web页面:

3.2.3:测试访问:

技术分享

3.2.4:使用settings配置文件定义模板路径:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  #获取到主目录mysite_django的绝对路径TEMPLATES = [    {        ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘,        ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)] #将templates目录添加到BASE_DIR环境变量,如果有别的目录就在这里添加到BASE_DIR目录,确认路径可以被找到        ,        ‘APP_DIRS‘: True,        ‘OPTIONS‘: {            ‘context_processors‘: [                ‘django.template.context_processors.debug‘,                ‘django.template.context_processors.request‘,                ‘django.contrib.auth.context_processors.auth‘,                ‘django.contrib.messages.context_processors.messages‘,            ],        },    },]

3.2.5:定义存放静态页面的路径:

3.2.6:配置html引用statics目录中的静态文件,css等属于是静态文件:

3.3:访问页面测试:

技术分享

3.3.1:jQuery打开页面:

技术分享

python成长之路17