对于全部的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。html
下面利用socket实现一个简单的web框架:python
#!/usr/bin/env python #coding:utf-8 import socket def 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()
而对于真实开发中的python web程序来讲,通常会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各类数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不一样的框架有不一样的开发方式,可是不管如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。这样,服务器程序就须要为不一样的框架提供不一样的支持。这样混乱的局面不管对于服务器仍是框架,都是很差的。对服务器来讲,须要支持各类不一样框架,对框架来讲,只有支持它的服务器才能被开发出的应用使用。这时候,标准化就变得尤其重要。咱们能够设立一个标准,只要服务器程序支持这个标准,框架也支持这个标准,那么他们就能够配合使用。一旦标准肯定,双方各自实现。这样,服务器能够支持更多支持标准的框架,框架也可使用更多支持标准的服务器。linux
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。web
python标准库提供的独立WSGI服务器称为wsgiref。sql
#!/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>' if __name__ == '__main__': httpd = make_server('', 8000, RunServer) print "Serving HTTP on port 8000..." httpd.serve_forever()
全部的web框架都是在此基础上进行扩展补充的。shell
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。数据库
mtv是相似的模型框架。django
MVC:Model、View、Controllerjson
MTV:Model、Template、View设计模式
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,便是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
Django是一个基于MVC构造的框架。可是在Django中,控制器接受用户输入的部分由框架自行处理,因此 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责以下:
模型(Model),即数据存取层
处理与数据相关的全部事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即表现层
处理与表现相关的决定: 如何在页面或其余类型文档中进行显示。
视图(View),即业务逻辑层
存取模型及调取恰当模板的相关逻辑。模型与模板之间的桥梁。
基本结构:
│ db.sqlite3 ----------sqlie3数据库 │ manage.py │ ├─logres │ │ admin.py 后台,能够用不多量的代码就拥有一个强大的后台。 │ │ apps.py │ │ models.py 与数据库操做相关,存入或读取数据时用到这个 │ │ tests.py │ │ urls.py │ │ views.py │ │ 处理用户发出的请求,从urls.py中对应过来, 经过渲染templates中的网页能够将显示 │ │ 内容好比登录后的用户名,用户请求的数据,输出到网页。 │ │ __init__.py │ │ │ ├─migrations │ │ 0001_initial.py │ │ __init__.py │ │ │ │ ├─Mushishi │ │ settings.py Django 的设置,配置文件,好比 DEBUG 的开关,静态文件的位置等 │ │ urls.py urls.py │ │ 网址入口,关联到对应的views.py中的一个函数(或者generic类), │ │ 访问网址就对应一个函数。 │ │ wsgi.py wsgi有多重一种uwsgi和wsgi,你用那种wsgi来运行Django, 通常不用改只有你用到的时候在改 │ │ __init__.py │ │ ├─static └─templates templates中的Html模板, index.html login.html regist.html
1.window 使用pycharm安装 过程略 2.window上使用pip安装 pip install django 3.linux下使用pip安装 yum install python-pip pip install django=1.9.5 4.检查是否安装成功 >>> import django >>> django.VERSION
1.建立django命令 django-admin.py startproject project-name(你工程的名字) 2.建立django的app python manage.py startapp app-name(你app的名字) 或 django-admin.py startapp app-name(你app的名字) 3.同步数据库 python manage.py syncdb 注意:Django 1.7.1及以上的版本须要用如下命令 python manage.py makemigrations python manage.py migrate 4.调试模式 python manage.py runserver 8001 #监听全部可用 ip (电脑可能有一个或多个内网ip,一个或多个外网ip,即有多个ip地址) python manage.py runserver 0.0.0.0:8000 5.清除数据库 python manage.py flush 6.建立超级管理员 python manage.py createsuperuser 按照提示就ok 7.修改管理员密码 python manage.py changepassword username(你当时设定的用户名) 8.导入和导出数据 python manage.py dumpdata appname > appname.json python manage.py loaddata appname.json 9.进入数据库 python manage.py dbshell 10.更多命令 python manage.py
建立一个project工程
首先点击 file-newproject而后按照如图所示建立一个工程
执行完目录结构以下:
目录解释以下:
hello -- 自定义的工程名称
--settings.py 主配置文件
--urls url路由文件
--wsgi 网络通讯接口
teplates html文件存放归档
接下来开始建立 app
以下在pychrom下的terminal中执行
$ python3 manage.py startapp helloworld
$
这时的目录结构以下:
编写路由规则:
路由规则在urls文件里:添加以下规则
"""hello URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.10/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from helloworld import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), #制定路由规则 ]
在views.py
from django.shortcuts import render # Create your views here. from django.shortcuts import HttpResponse def index(request): return HttpResponse("Hello world") #
启动django程序:
而后访问:
http://127.0.0.1:8000/index/
。。