web框架本质及Django的安装

web框架本质

  我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了

  可以说Web服务本质上都是在这十几行代码基础上扩展出来的。这段代码就是它们的祖宗。

HTTP协议主要规定了客户端和服务端之间的通信格式

所以我们收发消息需要严格按照HTTP格式来

自定义最基础的web框架

from  socket import *

server=socket(AF_INET,SOCK_STREAM)
server.bind(("127.0.0.1",8080))
server.listen()

while True:
    conn,addr=server.accept()
    date=conn.recv(1024)
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n<h1>objk</h1>")
    conn.close()

根据不同的路径返回不同的内容

import socket

server=socket.socket()
server.bind(("127.0.0.1",8080))
server.listen()

while True:
    conn,addr=server.accept()
    date=conn.recv(1024)
    #转换成str类型
    date=str(date,encoding="utf8")
    #获取url中的访问路径
    date1=date.split("\r\n")[0].split(" ")[1]
    print(date1)
    #http协议返回消息也要加状态行
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    if date1=="/home/":
        response=b"home"
    elif date1=="/index/":
        response=b"index"
    else:
        response=b"<h1>ojbk</h1>"
    conn.send(response)
    conn.close()

根据不同的路径返回不同的内容(函数版)

import socket

server=socket.socket()
server.bind(("127.0.0.1",8080))
server.listen()

def home(url):
    s = "这是{}页面!".format(url)
    return bytes(s, encoding="gbk")

def index(url):
    return b"index"

while True:
    conn,addr=server.accept()
    date=conn.recv(1024)
    #转换成str类型
    date=str(date,encoding="utf8")
    #获取url中的访问路径
    date1=date.split("\r\n")[0].split(" ")[1]
    #http协议返回消息也要加状态行
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    if date1=="/home/":
        response=home(date1)
    elif date1=="/index/":
        response=index(date1)
    else:
        response=b"<h1>ojbk</h1>"
    conn.send(response)
    conn.close()

根据不同的路径返回不同的内容(函数升级版)

import socket

server=socket.socket()
server.bind(("127.0.0.1",8000))
server.listen()

def home(url):
    s = "这是{}页面!".format(url)
    return bytes(s, encoding="gbk")

def index(url):
    return b"index"

while True:
    conn,addr=server.accept()
    date=conn.recv(1024)
    #转换成str类型
    date=str(date,encoding="utf8")
    #获取url中的访问路径
    date1=date.split("\r\n")[0].split(" ")[1]
    #http协议返回消息也要加状态行
    url_list=[
        ("/home/",home),
        ("index",index),
              ]
    fuck=None
    for i in url_list:
        if date1==i[0]:
            fuck=i[1]
            break
    if fuck:
        response=fuck(date1)
    else:
        response = b"404 not found!"
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    conn.send(response)
    conn.close()

加入html文件

import socket

server=socket.socket()
server.bind(("127.0.0.1",8000))
server.listen()

def home(url):
    s = "这是{}页面!".format(url)
    return bytes(s, encoding="gbk")

def index(url):
    return b"index"
def login(url):
    with open("登录页面.html","r",encoding="utf8")as f:
        s=f.read()
    return bytes(s, encoding="utf8")

while True:
    conn,addr=server.accept()
    date=conn.recv(1024)
    #转换成str类型
    date=str(date,encoding="utf8")
    print(date)
    #获取url中的访问路径
    date1=date.split("\r\n")[0].split(" ")[1]
    print(date1)
    #http协议返回消息也要加状态行
    url_list=[
        ("/home/",home),
        ("/index/",index),
        ("/login/",login)
              ]
    fuck=None
    for i in url_list:
        if date1==i[0]:
            fuck=i[1]
            break
    if fuck:
        response=fuck(date1)
    else:
        response = b"404 not found!"
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    conn.send(response)
    conn.close()

终极暗黑无敌版

import socket
import time

server=socket.socket()
server.bind(("127.0.0.1",8000))
server.listen()

def home(url):
    s = "这是{}页面!".format(url)
    return bytes(s, encoding="gbk")

def index(url):
    return b"index"

def login(url):
    with open("登录页面.html","r",encoding="utf8")as f:
        s=f.read()
    return bytes(s, encoding="utf8")

def user(url):
    now_time=str(time.time())
    with open("user.html","r",encoding="utf8")as f:
        s=f.read()
        s=s.replace("@@[email protected]@",now_time)
    return bytes(s, encoding="utf8")

while True:
    conn,addr=server.accept()
    date=conn.recv(1024)
    #转换成str类型
    date=str(date,encoding="utf8")
    print(date)
    #获取url中的访问路径
    date1=date.split("\r\n")[0].split(" ")[1]
    print(date1)
    #http协议返回消息也要加状态行
    url_list=[
        ("/home/",home),
        ("/index/",index),
        ("/login/",login),
        ("/user/",user)
              ]
    fuck=None
    for i in url_list:
        if date1==i[0]:
            fuck=i[1]
            break
    if fuck:
        response=fuck(date1)
    else:
        response = b"404 not found!"
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
    conn.send(response)
    conn.close()

wsgiref实例

from wsgiref.simple_server import make_server
import time

def home(url):
    s = "这是{}页面!".format(url)
    return bytes(s, encoding="gbk")

def index(url):
    return b"index"

def login(url):
    with open("登录页面.html","r",encoding="utf8")as f:
        s=f.read()
    return bytes(s, encoding="utf8")

def user(url):
    now_time=str(time.time())
    with open("user.html","r",encoding="utf8")as f:
        s=f.read()
        s=s.replace("@@[email protected]@",now_time)
    return bytes(s, encoding="utf8")

url_list=[
    ("/home/",home),
    ("/index/",index),
    ("/login/",login),
    ("/user/",user)
          ]
def run_server(environ,start_response):
    start_response("200 OK",[(‘Content-Type‘,‘text/html;charset=utf8‘),])
    url = environ[‘PATH_INFO‘]
    fuck=None
    for i in url_list:
        if url==i[0]:
            fuck=i[1]
            break
    if fuck:
        response=fuck(url)
    else:
        response = b"404 not found!"
    return [response,]

if __name__ == ‘__main__‘:
    httpd=make_server(‘127.0.0.1‘,8090,run_server)
    print(‘我在8090等你哦。。。‘)
    httpd.serve_forever()

Django

安装Django

1.在cmd命令行中敲入命令

pip3 install django==1.11.9

2.在pyCharm中直接下载

创建一个django项目

1.在cmd命令行中敲入命令

django-admin startproject mysite

2.打开pyCharm中的File--->new project--->选中Django--->创建一个新的项目即可

运行Django项目

1.在cmd命令行中敲入命令

python manage.py runserver 127.0.0.1:8000

2.点一下下图的绿色按钮(一般都在pyCharm的左上方 和 右上方)

静态文件配置

STATIC_URL = ‘/static/‘  # HTML中使用的静态文件夹前缀
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
]

Django基础必备三件套:

from django.shortcuts import HttpResponse, render, redirect

HttpResponse:内部传入一个字符串参数,返回浏览器

例如:

def index(request):
    # 业务逻辑代码
    return HttpResponse("OK")

render:接受一个URL参数,表示跳转到指定的URL。

例如:

def index(request):
    # 业务逻辑代码
    return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})

redirect:接受一个URL参数,表示跳转到指定的URL。

例如:

def index(request):
    # 业务逻辑代码
    return redirect("/home/")

 

 

原文地址:https://www.cnblogs.com/yftzw/p/9169053.html

时间: 2024-10-29 02:49:43

web框架本质及Django的安装的相关文章

Web框架本质及第一个Django实例

Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b"

Python自动化运维之26、Django系列-Web框架本质

一.Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/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"

Django Web框架本质

一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 1. 半成品自定义web框架 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b

框架----Web框架本质

一.Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import socket 5 6 def handle_request(client): 7 buf = client.recv(1024) 8 client.send("HTTP/1.1 200 OK\r\n\r\n") 9 client.send("

Web框架本质

一.Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/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"

Python开发【第十四篇】:Web框架本质

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8   import socket   def handle_request(client):     buf = client.recv(1024)     client.send("

Web 框架本质解析

一  Web框架本质 1. 自己开发Web框架 - socket - http协议 - HTML知识 - 数据库(pymysql,SQLAlchemy) HTTP: 无状态.短连接 TCP: 不断开 WEB应用(网站): Http协议: 发送: POST /index HTTP/1.1 Host: 127.0.0.1:8080 Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+x

Python之路(二十八):Web框架本质

Django前戏之Web框架本质及浅谈HTTP协议 Web框架本质 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # !/usr/bin/env python # -*- coding:utf-8 -*- # __Author__ Jianer import socket    def handle_reques

【Django】Web框架本质 -- 2019-08-08 18:03:29

目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 原文: http://106.13.73.98/__/32/ @ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==.** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.