一.今日内容总结

  

  1. 1.HTTP协议:
  2. 请求:浏览器发给服务端的消息
  3. 格式:
  4. 请求方法 URL 协议版本\r\n
  5. k1: v1\r\n
  6. k2: v2\r\n
  7. \r\n
  8. 请求体(请求数据)
  9.  
  10. 响应:服务端返回给浏览器的消息
  11. 格式:
  12. 协议版本 状态码 状态描述符\r\n
  13. k1: v1\r\n
  14. k2: v2\r\n
  15. \r\n
  16. 响应体(HTML
  17. 2. web框架
  18. 本质:socket服务端
  19.  
  20. 功能:
  21. 1. socket收发消息
  22. 2. url和函数的对应关系,根据不同的URL执行不同函数
  23. 3. 字符串的替换(模板渲染)
  24. 3. web框架分类
  25. 实现123的框架 ——》 tornado
  26. 实现 23的框架,使用的第三方1 wsgiref uwsgi ——》 django
  27. 实现 2 的框架 ——》 flask
  28.  
  29. 分类:
  30. 1django
  31. 2、其他
  32.  
  33. 4. 安装django
  34. 1. 命令行: pip install django==1.11.14
  35. 2. pycahrm安装 加号 输入django 选择版本
  36.  
  37. 5. 启动django
  38. 1. 命令行:
  39. python manage.py runserver # 127.0.0.1:8000
  40. python manage.py runserver 80 # 127.0.0.1:80
  41. python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
  42. 2. pycahrm启动
  43. 1. 做配置
  44. 2. 点绿色三角(切记 不要右键启动)

笔记

  1.http

1.http请求格式

请求行
请求方法+空格+请求地址url+空格+请求协议版本+/r/n
请求头部:
头部字段名:值/r/n
...............
/r/n
请求数据
2.http响应格式
响应行
协议版本+空格+状态码+空格+状态码描述+/r/n
响应头部
头部字段名:值/r/n
............
/r/n
响应正文
3.url
以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:
传送协议
层级URL标记符号(为[//],固定不变)
访问资源需要的凭证信息(可省略)
服务器: 域名或IP
端口号
路径:端口号后至?前
查询:问号后
片段:以“#”字符为起点
4.HTTP状态码
状态代码的第一个数字代表当前响应的类型:

1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误

2.socket  web服务器搭建html动态显示版本

  

  1. import socket
  2.  
  3. sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  4. sk.bind(('127.0.0.1',8080))
  5. sk.listen()
  6. while True:
  7. conn,addr = sk.accept()
  8. data = conn.recv(8092)
  9.  
  10. url = data.decode('utf-8').split('\r\n')[0].split()[1]
  11. print(url)
  12.  
  13. def rihan(url):
  14. return bytes('日韩', encoding='utf-8')
  15.  
  16. def index(url):
  17. with open('index.html', 'r', encoding='utf-8') as f:
  18. res = f.read()
  19. return bytes(res, encoding='utf-8')
  20.  
  21. def timer(url):
  22. import time
  23. with open('timer.html', 'r', encoding='utf-8') as f:
  24. res = f.read().replace('@@timer@@', time.strftime('%Y-%m-%d %H-%M-%S'))
  25. return bytes(res, encoding='utf-8')
  26.  
  27. def favicon(url):
  28. with open('favicon.ico', mode='rb') as f:
  29. res = f.read()
  30. return res
  31.  
  32. li1 = [
  33. ("/rihan",rihan),
  34. ('/index',index),
  35. ('/timer',timer),
  36. ('/favicon.ico',favicon),
  37. ]
  38. func = None
  39. for i in li1:
  40. if i[0] == url:
  41. func = i[1]
  42. if func == favicon:
  43. conn.send(b'http/1.1 200 OK\r\nContent-Type:image/x-icon;charset=utf-8\r\n\r\n')
  44. conn.send(func(url))
  45. elif func:
  46. conn.send(b'http/1.1 200 OK\r\nContent-Type:text/html;charset=utf-8\r\n\r\n')
  47. conn.send(func(url))
  48. else:
  49. conn.send(b'http/1.1 200 OK\r\nContent-Type:text/html;charset=utf-8\r\n\r\n')
  50. conn.send(b'')
  51. conn.close()

html动态显示板

  3.wsgiref模块和jinja2模块组合版本

  1. from jinja2 import Template
  2. from wsgiref.simple_server import make_server
  3. # 导入模块
  4.  
  5. def home(url):
  6. with open('home.html', 'r', encoding='utf-8') as f:
  7. data = f.read()
  8. return bytes(data, encoding='utf-8')
  9.  
  10. def index2(url):
  11. with open('index2.html', 'r', encoding='utf-8') as f:
  12. data = f.read()
  13. template = Template(data) # 定义模板
  14. res = template.render({'name': 'alex', 'items': ['抽烟', '喝酒', '烫头']}) # 渲染模板,传参字典类型
  15. return bytes(res, encoding='utf-8')
  16.  
  17. dic1 = {
  18. '/home/': home,
  19. '/index2/': index2,
  20. }
  21.  
  22. def run_server(environ,start_response):
  23. start_response('200 Ok', [('Content-Type', 'text/html;charset=utf-8'), ]) # 响应行,响应头部
  24. url = environ['PATH_INFO']
  25. func = dic1.get(url)
  26. print(url)
  27. if func:
  28. response = func(url)
  29. else:
  30. response = b'404 not found!!!'
  31.  
  32. return [response, ]
  33.  
  34. if __name__ == '__main__':
  35. httpd = make_server('127.0.0.1', 8000, run_server)
  36. print('服务器已启动!')
  37. httpd.serve_forever()

  4.启动Djongo

   命令行安装:pip install django==1.11.14

   命令创建工程:django-admin.py startproject 项目名

   启动项目:

    命令行方法:

    

    pycharm方法:

  

   

  

  

二.预习和扩展

  1.Django2.0 path与Django1.x版本url正则匹配问题

 

2.0内的path匹配正则时候无效,

导入re_path即可匹配正则

python全栈开发day59-Django基础的更多相关文章

  1. Python全栈开发:django网络框架(一)

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  2. Python全栈开发:django网络框架(二)

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  3. python全栈开发-Day8 函数基础

    python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...

  4. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  5. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  6. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  7. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  8. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  9. python全栈开发目录

    python全栈开发目录 Linux系列 python基础 前端~HTML~CSS~JavaScript~JQuery~Vue web框架们~Django~Flask~Tornado 数据库们~MyS ...

  10. Python全栈开发相关课程

    Python全栈开发 Python入门 Python安装 Pycharm安装.激活.使用 Python基础 Python语法 Python数据类型 Python进阶 面向对象 网络编程 并发编程 数据 ...

随机推荐

  1. 007grafana监控时间戳转换

    一. https://d.jyall.me/dashboard-solo/db/soloview?panelId=1&var-metrics=stats.gauges.zookeeper.mo ...

  2. 【原创】运维基础之Docker(5)docker部署airflow

    部署方式:docker+airflow+mysql+LocalExecutor 使用airflow的docker镜像 https://hub.docker.com/r/puckel/docker-ai ...

  3. 【原创】大叔经验分享(39)spark cache unpersist级联操作

    问题:spark中如果有两个DataFrame(或者DataSet),DataFrameA依赖DataFrameB,并且两个DataFrame都进行了cache,将DataFrameB unpersi ...

  4. C# 封装微信的模板消息

    1.先新建一个类库,以方便以后移植到其他的项目上继续使用,如何新建类库就自己去百度了哈,这里就不描述了,若有不会的朋友请留言哈.标红了的都要注意下咯. 2.先看看WxTemplate这个类文件的代码 ...

  5. Oracle中如何查询CLOB字段类型的内容

    注:本文来源于:<Oracle中如何查询CLOB字段类型的内容> 语法 select * from table_name where dbms_lob.instr(字段名(clod类型), ...

  6. Confluence 6 为登录失败配置使用验证码

    如果你具有 Confluence 管理员的权限,你可以限制 Confluence 登录失败的最大尝试次数.在给予最大登录失败尝试(默认为 3 次)次数后,Confluence 将会在用户进行再次尝试的 ...

  7. ionic3 极光推送

    参考网站:http://www.jianshu.com/p/eb8ab29329d9 遇到的问题是  执行以下命令一直报错 cordova plugin add https://github.com/ ...

  8. nginx常用命令及简单配置

    nginx常用命令 nginx -c /usr/local/nginx/conf/nginx.conf 启动nginx(windows下start nginx); nginx -s quit 停止ng ...

  9. select下拉框使用完毕后,重置按钮使其清空

    需求描述:select下拉框后边有两个按钮,一个查询,一个重置,点击重置,select会清空之前选择的那个查询条件 解决思路:卧槽,这不so easy 么,用那个jQ封装的trigger函数搞定啊,对 ...

  10. 【python】统一转换日期格式dateutil.parser.parse

    背景: 我有很多很多的日志数据,每个日志里面都有日期字符串,我需要将其转换为datetime格式. 问题是,这些日志里的字符串格式五花八门,有2017-05-25T05:27:30.313292255 ...