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>普通版本

  1. import socket
  2. sk = socket.socket()
  3.  
  4. sk.bind(("127.0.0.1",8080))
  5. sk.listen()
  6.  
  7. while 1:
  8.  
  9. conn,addr = sk.accept()
  10.  
  11. data = conn.recv(1024)
  12.  
  13. #接收到的是一个byte类型的数据需要转化成字符串,注意编码
  14.  
  15. data_str = str(data,encoding="utf-8")
  16.  
  17. #对字符串进行切割操作
  18.  
  19. first_line = data_str.split("\r\n")[0]
  20. #对请求按空格切割
  21.  
  22. url = first_line.split(" ")[1]
  23.  
  24. if url == "/xuexue/":
  25. msg = b"hello"
  26. elif url == "/xiaoxue/":
  27. msg = b"miss"
  28. else:
  29. msg = b"404 not found !"
  30. conn.send(b"HTTP/1.1 200 Ok\r\n\r\n")
  31. conn.send(msg)
  32. conn.close()

客户端fade是个啥

  1. '''GET /yingying/ HTTP/1.1
  2. Host: 127.0.0.1:8080
  3. Connection: keep-alive
  4. Upgrade-Insecure-Requests: 1
  5. 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
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  7. Accept-Encoding: gzip, deflate, br
  8. Accept-Language: zh-CN,zh;q=0.9
  9.  
  10. '''

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

  1. import socket
  2. sk = socket.socket()
  3. sk.bind(("127.0.0.1",8080))
  4. sk.listen()
  5. def xuexue(url): #这个哪吒说必须传url参数,但是不传参数也可以啊
  6. data = b"hello"
  7. return data
  8.  
  9. def xiaoxue(url):
  10.  
  11. data = "miss"
  12.  
  13. return bytes(data,encoding="utf-8")
  14.  
  15. while 1:
  16.  
  17. conn,addr = sk.accept()
  18.  
  19. data = conn.recv(1024)
  20.  
  21. data_str = str(data,encoding="utf-8")
  22.  
  23. first_line = data_str.split("\r\n")[0]
  24.  
  25. url = first_line.split(" ")[1]
  26.  
  27. if url == "/xuexue/":
  28.  
  29. msg = xuexue(url)
  30.  
  31. elif url == "/xiaoxue/":
  32.  
  33. msg = xiaoxue()
  34.  
  35. else:
  36.  
  37. msg = b"404 not found !"
  38.  
  39. conn.send(b"HTTP/1.1 200 ok\r\n\r\n")
  40.  
  41. conn.send(msg)
  42.  
  43. conn.close()

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

  1. import socket
  2. sk = socket.socket()
  3. sk.bind(("127.0.0.1",8080))
  4. sk.listen()
  5.  
  6. def xuexue(url):
  7.  
  8. return b"hello"
  9.  
  10. def xiaoxue(url):
  11.  
  12. data = "miss"
  13.  
  14. return bytes(data,encoding="utf-8")
  15.  
  16. url_func = [
  17.  
  18. ("/xuexue/",xuexue),
  19. ("/xiaoxue/",xiaoxue)
  20. ]
  21.  
  22. while 1:
  23.  
  24. conn,addr = sk.accept()
  25.  
  26. data = conn.recv(1024)
  27.  
  28. data_str = str(data,encoding="utf-8")
  29.  
  30. first_line = data_str.split("\r\n")[0]
  31.  
  32. url = first_line.split(" ")[1]
  33.  
  34. for el in url_func:
  35.  
  36. if el[0] == url
  37.  
  38. msg = el[1](url)
  39.  
  40. else:
  41.  
  42. msg = b"404 not found"
  43.  
  44. conn.send(b"HTTP/1.1 200 ok\\r\n\r\n")
  45.  
  46. conn.send(msg)
  47.  
  48. sonn.close()

4.4> 静态网页版本

  1. import socket
  2. sk = socket.socket()
  3. sk.bind(("127.0.0.1",8080))
  4. sk.listen()
  5. def xuexue(url):
  6. data = "hello"
  7. return bytes(data,encoding="utf-8")
  8.  
  9. def xiaoxue(url):
  10.  
  11. data = "miss"
  12.  
  13. return bytes(data,encoding="utf-8")
  14.  
  15. def login(url):
  16.  
  17. with open("login.html","rb") as f:
  18.  
  19. data = f.read()
  20.  
  21. return data
  22.  
  23. url_func = [
  24. ("/xuexue/",xuexue),
  25. ("/xiaoxue/",xiaoxue),
  26. ("/login/",login)
  27. ]
  28.  
  29. while 1:
  30.  
  31. conn,addr = sk.accept()
  32.  
  33. data = conn.recv(8192)
  34. data_str = str(data,encoding="utf-8")#bytes类型转化成字符串可以直接转化,并且加一个编码.
  35. first_line = data_str.split("\r\n")[0]
  36.  
  37. url = first_line.split(" ")[1]
  38.  
  39. for el in url_func:
  40.  
  41. if el[0] ==url:
  42.  
  43. msg = el[1](url)
  44.  
  45. else:
  46.  
  47. msg = b"404 not found !"
  48.  
  49. conn.send(b"HTTP/1.1 200 ok\r\n\r\n")
  50.  
  51. conn.send(msg)
  52.  
  53. conn.close()

4.5>动态网页版本

  1. import socket
  2. import time
  3. sk = socket,socket()
  4. sk.bind(("127.0.0.1",8080))
  5. sk.listen()
  6. def xuexue(url):
  7. data = "hello"
  8. return bytes(data,encoding="utf-8")
  9. def xiaoxue(url):
  10. data = "miss"
  11. return bytes(data,encoding="utf-8")
  12. def login(url):
  13. with open("login.html","r") as f:
  14. data = f.read()
  15. now = str(time.time())
  16. data = data.replace("@@xx@@",now)
  17. return bytes(data,encoding="utf-8")
  18. url_func = [
  19. ("/xuexue/",xuexue),
  20. ("/xiaoxue/",xiaoxue),
  21. ("/login/",login)
  22. ]
  23. while 1:
  24.  
  25. conn,addr = sk.accept()
  26. data = conn.recv(8192)
  27.  
  28. data_str = bytes(data,encoding="utf-8")
  29.  
  30. first_line = data_str.split("\r\n")[0]
  31. url = first_ine.split(" ")[1]
  32. for el in url_func:
  33. if el[0] == url:
  34. msg = el[1](url)
  35. else:
  36. msg = b"404 not found !"
  37. conn.send(b"HTTP/1.1 200 ok\r\n\r\n")
  38. 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. 03 数据解析-Xpath

    Xpath解析 XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. ...

  2. include_once 问题

    最近在做微信小程序,在include_once 微信文件后,该方法return 前面会用特殊字符,导致我return 给前端的本来是json串变成了字符 解决方法 : ob_clean(); retu ...

  3. iptables之FORWARD转发链

    注意:本机路由转发的时候,才配置FORWARD转发链! #iptables –A FORWARD –s 192.168.0.0/24 –j ACCEPT #iptables –A FORWARD –d ...

  4. HDU 5076 Memory

    Memory Time Limit: 4000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 50 ...

  5. python3--shelve 模块

    shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 import shelve d = shelve.open('shelve_t ...

  6. 【优先级队列】 Holedox Eating

    https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/M [Accepted] #include<iostream> #in ...

  7. [NOIP1999] 提高组 洛谷P1014 Cantor表

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … ...

  8. 如何改变linux系统的只读文件的权限

    vim 编辑可以在命令模式输入 :wq! 保存退出可以用chmod 命令修改文件权限. chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一 ...

  9. 远程连接mongodb时,27017端口连接不上的解决办法

    一.背景描述: 我在linux  RED7上安装了mongodb,并没有修改mongodb的配置文件.然后通过另外一台电脑用pymongo连接mongodb时,报错:timeout. ping IP ...

  10. msp430项目编程26

    msp430中项目---串行存储器接口 1.I2C工作原理 2.I2C通信协议 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习