码迷,mamicode.com
首页 > Web开发 > 详细

web框架

时间:2017-06-15 20:38:05      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:ade   lock   pos   改进   and   创建   att   post   相同   

1.web框架的本质

在web浏览中, 浏览器相当于客户端, 对web的操作相当于编写服务器
最基本的web服务器代码为
import socket
server=socket.socket()
server.bind((‘127.0.0.1‘,8080))
server.listen(5)

while True:
    conn,addr=server.accept()
    data=conn.recv(1024)
    conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘))
    conn.send(‘hello world‘.encode(‘utf8‘))
    conn.close()

解析HTTP的请求报文

请求头和请求体用\r\n\r\n分割

请求头中的每一行用\r\n分割

 

2.基本框架的改进

(1)限制URL

通过分析请求头,获得请求头的URL,用URL来返回不同的数据

import socket
server=socket.socket()
server.bind((‘127.0.0.1‘,8080))
server.listen(5)

while True:
    conn,addr=server.accept()
    data=conn.recv(1024).decode(‘utf8‘)
    header,bodys=data.split(‘\r\n\r\n‘)
    ##请求头与请求体用\r\n\r\n分割
    headerlist=header.split(‘\r\n‘)
    ##请求头以\r\n分割
    method,url,protocal=headerlist[0].split(‘ ‘)
    ##获取请求头的首行
    conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘))
    if url==‘/index‘:
        conn.send(‘main page‘.encode(‘utf8‘))
        ##限制URL
    else:
        conn.send(‘404‘.encode(‘utf8‘))

(2)将URL封装

import socket
server=socket.socket()
server.bind((‘127.0.0.1‘,8080))
server.listen(5)

def f1():
    conn.send(‘main page‘.encode(‘utf8‘))

def f2():
    conn.send(‘hello world‘.encode(‘utf8‘))

routers=[
    (‘/index‘,f1),
    (‘/hi‘,f2)
]
while True:
    conn,addr=server.accept()
    data=conn.recv(1024).decode(‘utf8‘)
    header,bodys = data.split(‘\r\n\r\n‘)
    headerlist = header.split(‘\r\n‘)
    method, url, protocal = headerlist[0].split(‘ ‘)
    conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘))
    func_name=None
    for item in routers:
        if item[0]==url:
            func_name=item[1]##限制URL,对应字典中的value,触发函数的执行
            break
    if func_name:
        func_name()
    else:
        conn.send(‘404‘.encode(‘utf8‘))
    conn.close()

(3)通过读取文件返回HTML页面

def f3():
    with open(‘login.html‘,‘rb‘)as f:
        conn.send(f.read())

routers=[
    (‘/index‘,f1),
    (‘/hi‘,f2),
    (‘/wapper‘,f3)
]

(4)通过替换特殊字符串来动态返回HTML页面

def f4():
    with open(‘login.html‘,‘rb‘)as f:
        data=f.read()
    import time
    ctime=time.time()
    data=data.replace(b‘@@@ctime@@@‘,b‘ctime‘)
    conn.send(data)
routers=[
    (‘/index‘,f1),
    (‘/hi‘,f2),
    (‘/wapper‘,f3),
    (‘/time‘,f4)
]

(5)读取数据库的表,获得数据库的数据并显示

(6)使用jinjia2来替换动态内容

 

3.框架的分类

4.Django框架

4.1创建基本Django项目

(1)安装

pip3 install django
   
添加环境变量
一般安装到Python的scripts的文件夹下
将scripts文件夹添加到环境变量
C:\Python36\Scripts\django-admin

创建一个项目

django-admin startproject 项目名

进入该项目目录中

python manage.py runserver IP地址:端口

如果不带上IP地址和端口, 默认是本地地址, 端口为8000

 

4.2用IDE创建Django项目

项目结构相同
│  db.sqlite3
│  manage.py          项目启动管理PY文件

└─项目名
    │  settings.py        项目配置文件
    │  urls.py                路由配置
    │  wsgi.py                
    │  __init__.py
    │
    └─__pycache__
 
(1)配置URL urls.py
urlpatterns = [
    # url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘, login),##后面一定要加逗号!!
]

 

(2)配置处理 函数urls.py

from django.conf.urls import url
from django.contrib import admin

from django.shortcuts import HttpResponse,render,redirect
def login(request):#处理用户请求 并且返回结果
#至少有一个参数
# request 用户请求相关的所有信息(对象)

    # return HttpResponse(‘login‘)    #HttpResponse里面只能加字符串
# 返回用户所需要的信息
    # return HttpResponse(‘<input>‘)#也可以返回一个标签,或者文件
    if request.method=="GET":
        return render(request,‘login.html‘)
    else:
        print(request.POST)#用户名密码字典都放在POST里面
    #获取
        u=request.POST.get("username")
        p=request.POST.get("password")
        if u=="root" and p=="123123":
            return redirect(‘http://www.oldboyedu.com/‘)##跳转地址
            #登录成功
        else:
            return render(request,‘login.html‘,{‘msg‘:‘用户名或密码错误‘})
            #登录失败
#render默认自动查找模板路径下的login.html文件
#读取内容并返回给用户

 

(3)使用render的模板文件配置settings.py

‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)]
 一般地, 模板文件放在templates文件中, 配置这个之后就能找到该文件了
 
(4)配置静态文件目录 settings.py
<link rel="stylesheet" href="/static/com.css">
 --STATIC_URL = ‘/static/‘
 STATICFILES_DIRS=(
     os.path.join(BASE_DIR,‘sta‘),
 )

 

web框架

标签:ade   lock   pos   改进   and   创建   att   post   相同   

原文地址:http://www.cnblogs.com/asaka/p/7011509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!