分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

web框架本质及Django的安装

发布时间:2023-09-06 01:59责任编辑:顾先生关键词:暂无标签

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 socketserver=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 socketserver=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 socketserver=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 socketserver=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 socketimport timeserver=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("@@xx@@",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_serverimport timedef 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("@@xx@@",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/")

 

 

web框架本质及Django的安装

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved