1,web框架的原理

1.1>c/s架构和b/s架构

  1>c/s客户端模式

  2>B/S浏览器模式-----web开发(web开发开的是B/S架构)

1.2>web开发的本质

  1.2.1>互联网上两台机器之间的通信:(1)IP,(2)端口,(3)协议

  1.2.2>协议:(1)HTTP默认端口是80,(2)HTTPS默认端口是443

  1.2.3>HTTP get请求格式

  1.2.4>HTTP相应格式

1.3>浏览器输入URL回车返回页面,这之间都经历了什么?

  (1)域名 ->DNS解析 ->IP地址 ->服务端 ->返回消息 ->浏览器

  (2)浏览器  <==> 服务器

  (3)服务器吧写好的HTML页面,返回给;浏览器按照HTML格式进行渲染(显示)

2,python中的web框架的分类

  2.1>收发socket消息,按照HTTP协议解析消息

  2.2>字符串替换

  2.3>业务逻辑处理

  自己实现2.1,2.2,2.3的是tornado框架

  自己实现2.2,2.3使用别人的2.1是Django框架

  自己实现2.3使用别人的2.1,2.2是flask

  另一个维度 的框架分类:1,Django  2,其他

3,Django的安装

  3.1>django注意版本LTS

  3.2>安装命令:pip install Django == 1.11.11(卸载Django:pip uninstall django)

  3.3>创建第一个Django项目

    3.3.1>命令行创建:django-admin startproject 项目名

    3.3.2>在pycharm:File ->new Project ->左侧选第二项,右侧第一项是路径,第二页是python版本,在新的pycharm窗口打开新建的Django项目

  3.4>启动django项目

    3.4.1>在命令行启动:在django项目的跟目录下,执行下面的命令

      python manage.py runserver

      python manage.py runserver 8080

      停止:Ctrl + c

    3.402>pycharm启动:点绿色的三角,注意左侧框中的名字一定钥匙项目名称!

4,模拟web服务器

4.1>普通版本

import socket
sk = socket.socket() sk.bind(("127.0.0.1",8080))
sk.listen() while 1: conn,addr = sk.accept() data = conn.recv(1024) #接收到的是一个byte类型的数据需要转化成字符串,注意编码 data_str = str(data,encoding="utf-8") #对字符串进行切割操作 first_line = data_str.split("\r\n")[0]
#对请求按空格切割 url = first_line.split(" ")[1] if url == "/xuexue/":
msg = b"hello"
elif url == "/xiaoxue/":
msg = b"miss"
else:
msg = b"404 not found !"
conn.send(b"HTTP/1.1 200 Ok\r\n\r\n")
conn.send(msg)
conn.close()

客户端fade是个啥

'''GET /yingying/ HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9 '''

4.2>模拟web服务器的函数版本

import socket
sk = socket.socket()
sk.bind(("127.0.0.1",8080))
sk.listen()
def xuexue(url): #这个哪吒说必须传url参数,但是不传参数也可以啊
data = b"hello"
return data def xiaoxue(url): data = "miss" return bytes(data,encoding="utf-8") while 1: conn,addr = sk.accept() data = conn.recv(1024) data_str = str(data,encoding="utf-8") first_line = data_str.split("\r\n")[0] url = first_line.split(" ")[1] if url == "/xuexue/": msg = xuexue(url) elif url == "/xiaoxue/": msg = xiaoxue() else: msg = b"404 not found !" conn.send(b"HTTP/1.1 200 ok\r\n\r\n") conn.send(msg) conn.close()

4.3>模拟web服务器的反射进阶版

import socket
sk = socket.socket()
sk.bind(("127.0.0.1",8080))
sk.listen() def xuexue(url): return b"hello" def xiaoxue(url): data = "miss" return bytes(data,encoding="utf-8") url_func = [ ("/xuexue/",xuexue),
("/xiaoxue/",xiaoxue)
] while 1: conn,addr = sk.accept() data = conn.recv(1024) data_str = str(data,encoding="utf-8") first_line = data_str.split("\r\n")[0] url = first_line.split(" ")[1] for el in url_func: if el[0] == url msg = el[1](url) else: msg = b"404 not found" conn.send(b"HTTP/1.1 200 ok\\r\n\r\n") conn.send(msg) sonn.close()

4.4> 静态网页版本

import socket
sk = socket.socket()
sk.bind(("127.0.0.1",8080))
sk.listen()
def xuexue(url):
data = "hello"
return bytes(data,encoding="utf-8") def xiaoxue(url): data = "miss" return bytes(data,encoding="utf-8") def login(url): with open("login.html","rb") as f: data = f.read() return data url_func = [
("/xuexue/",xuexue),
("/xiaoxue/",xiaoxue),
("/login/",login)
] while 1: conn,addr = sk.accept() data = conn.recv(8192)
data_str = str(data,encoding="utf-8")#bytes类型转化成字符串可以直接转化,并且加一个编码.
first_line = data_str.split("\r\n")[0] url = first_line.split(" ")[1] for el in url_func: if el[0] ==url: msg = el[1](url) else: msg = b"404 not found !" conn.send(b"HTTP/1.1 200 ok\r\n\r\n") conn.send(msg) conn.close()

4.5>动态网页版本

import socket
import time
sk = socket,socket()
sk.bind(("127.0.0.1",8080))
sk.listen()
def xuexue(url):
data = "hello"
return bytes(data,encoding="utf-8")
def xiaoxue(url):
data = "miss"
return bytes(data,encoding="utf-8")
def login(url):
with open("login.html","r") as f:
data = f.read()
now = str(time.time())
data = data.replace("@@xx@@",now)
return bytes(data,encoding="utf-8")
url_func = [
("/xuexue/",xuexue),
("/xiaoxue/",xiaoxue),
("/login/",login)
]
while 1: conn,addr = sk.accept()
data = conn.recv(8192) data_str = bytes(data,encoding="utf-8") first_line = data_str.split("\r\n")[0]
url = first_ine.split(" ")[1]
for el in url_func:
if el[0] == url:
msg = el[1](url)
else:
msg = b"404 not found !"
conn.send(b"HTTP/1.1 200 ok\r\n\r\n")
conn.send(msg)

web框架和Django框架的初识的更多相关文章

  1. wsgiref模块、web框架、django框架简介

    """web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...

  2. 手动搭建简易web框架与django框架简介

    目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...

  3. 如何在asp.net mvc框架及django框架下面避免CSRF

    CSRF 跨站伪造请求 不知CSRF为何物的,可以问下G哥. 在Asp.net MVC平台下,提供了Html.AntiForgeryToken() 方法,我们只需把其放在form的标签内,在浏览器端就 ...

  4. web框架之Django<一、初识>

    一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的 ...

  5. [oldboy-django][1初始django]web框架本质 + django框架 + ajax

    web框架本质 浏览器(socket客户端) - 发送请求(ip和端口,url http://www.baidu.com:80/index/) - GET 请求头(数据请求行的url上: Http1. ...

  6. web开发中的MVC框架与django框架的MTV模式

    1.MVC 有一种程序设计模式叫MVC,核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高了程序的可扩展性和可维护性. MVC的全拼为Model- ...

  7. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的 ...

  8. Python Web开发:使用Django框架创建HolleWorld项目

    开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...

  9. Python学习笔记_04:Django框架简介

    目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...

随机推荐

  1. Linux vsftpd服务

    vsftpd服务 由vsftpd包提供 不再由xinetd管理 用户认证配置文件:/etc/pam.d/vsftpd 服务脚本: /usr/lib/systemd/system/vsftpd.serv ...

  2. python:零散记录

    1.rstrip()删除末尾指定字符串 例如:A = '1,2,3,4,5,' B = A.rstrip(',') B = '1,2,3,4,5' 2.isdigit()方法 Python isdig ...

  3. jquery ajax示例

    $.ajax({ type: "POST",//方法类型 dataType: "json",//预期服务器返回的数据类型 url: "${ctx }/ ...

  4. Spring入门(1)——搭建简单的环境

    步骤: 1.下载spring框架开发包. 2.创建web项目并引入开发包. 3.创建java接口和相应的实现类. 4.编写spring的配置文件. 5.编写 测试类,并进行测试. 1.下载spring ...

  5. 洛谷 P1156 垃圾陷阱 谈论剪枝,非满分

    这是一个91分的非dp代码(是我太弱) 剪枝八五个(实际上根本没那么多,主要是上课装逼,没想到他们dp水过去了),不过我的思路与dp不同: 1.层数到达i+1,return 这个必须有 2.当前剩余生 ...

  6. Python+selenium(操作隐藏元素)

    测试过程中,偶尔会碰到一些页面的隐藏元素,如下,是小编举的一个简单的例子: test.html <html> <head></head> <body> ...

  7. C 的指针和内存泄漏

    引言 对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏 ...

  8. 【Java 理论篇 1】Java2平台的三个版本介绍

    导读:关于java的三种分类J2SE.J2EE.J2ME,在网上有很多资料,然后自己写的,也大多是从各个网站上搜罗里的.算是自己的一种笔记,或者明白的说,就是把别人的东西抄一遍.但是,这对于我来说,也 ...

  9. 亚瑟王(bzoj 4008)

    Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...

  10. URAL 1614. National Project “Trams” [ 构造 欧拉回路 ]

    传送门 1614. National Project “Trams” Time limit: 0.5 secondMemory limit: 64 MB President has declared ...