python全栈开发day59-Django基础
一.今日内容总结
1.HTTP协议:
请求:浏览器发给服务端的消息
格式:
请求方法 URL 协议版本\r\n
k1: v1\r\n
k2: v2\r\n
\r\n
请求体(请求数据) 响应:服务端返回给浏览器的消息
格式:
协议版本 状态码 状态描述符\r\n
k1: v1\r\n
k2: v2\r\n
\r\n
响应体(HTML)
2. web框架
本质:socket服务端 功能:
1. socket收发消息
2. url和函数的对应关系,根据不同的URL执行不同函数
3. 字符串的替换(模板渲染)
3. web框架分类
实现1、2、3的框架 ——》 tornado
实现 2、3的框架,使用的第三方1 wsgiref uwsgi ——》 django
实现 2 的框架 ——》 flask 分类:
1、django
2、其他 4. 安装django
1. 命令行: pip install django==1.11.14
2. pycahrm安装 加号 输入django 选择版本 5. 启动django:
1. 命令行:
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
2. pycahrm启动
1. 做配置
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动态显示版本
import socket sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind(('127.0.0.1',8080))
sk.listen()
while True:
conn,addr = sk.accept()
data = conn.recv(8092) url = data.decode('utf-8').split('\r\n')[0].split()[1]
print(url) def rihan(url):
return bytes('日韩', encoding='utf-8') def index(url):
with open('index.html', 'r', encoding='utf-8') as f:
res = f.read()
return bytes(res, encoding='utf-8') def timer(url):
import time
with open('timer.html', 'r', encoding='utf-8') as f:
res = f.read().replace('@@timer@@', time.strftime('%Y-%m-%d %H-%M-%S'))
return bytes(res, encoding='utf-8') def favicon(url):
with open('favicon.ico', mode='rb') as f:
res = f.read()
return res li1 = [
("/rihan",rihan),
('/index',index),
('/timer',timer),
('/favicon.ico',favicon),
]
func = None
for i in li1:
if i[0] == url:
func = i[1]
if func == favicon:
conn.send(b'http/1.1 200 OK\r\nContent-Type:image/x-icon;charset=utf-8\r\n\r\n')
conn.send(func(url))
elif func:
conn.send(b'http/1.1 200 OK\r\nContent-Type:text/html;charset=utf-8\r\n\r\n')
conn.send(func(url))
else:
conn.send(b'http/1.1 200 OK\r\nContent-Type:text/html;charset=utf-8\r\n\r\n')
conn.send(b'')
conn.close()
html动态显示板
3.wsgiref模块和jinja2模块组合版本
from jinja2 import Template
from wsgiref.simple_server import make_server
# 导入模块 def home(url):
with open('home.html', 'r', encoding='utf-8') as f:
data = f.read()
return bytes(data, encoding='utf-8') def index2(url):
with open('index2.html', 'r', encoding='utf-8') as f:
data = f.read()
template = Template(data) # 定义模板
res = template.render({'name': 'alex', 'items': ['抽烟', '喝酒', '烫头']}) # 渲染模板,传参字典类型
return bytes(res, encoding='utf-8') dic1 = {
'/home/': home,
'/index2/': index2,
} def run_server(environ,start_response):
start_response('200 Ok', [('Content-Type', 'text/html;charset=utf-8'), ]) # 响应行,响应头部
url = environ['PATH_INFO']
func = dic1.get(url)
print(url)
if func:
response = func(url)
else:
response = b'404 not found!!!' return [response, ] if __name__ == '__main__':
httpd = make_server('127.0.0.1', 8000, run_server)
print('服务器已启动!')
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基础的更多相关文章
- Python全栈开发:django网络框架(一)
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- Python全栈开发:django网络框架(二)
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- python全栈开发-Day8 函数基础
python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...
- Python全栈开发【基础四】
Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- Python全栈开发【基础二】
Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...
- Python全栈开发【基础一】
Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- python全栈开发目录
python全栈开发目录 Linux系列 python基础 前端~HTML~CSS~JavaScript~JQuery~Vue web框架们~Django~Flask~Tornado 数据库们~MyS ...
- Python全栈开发相关课程
Python全栈开发 Python入门 Python安装 Pycharm安装.激活.使用 Python基础 Python语法 Python数据类型 Python进阶 面向对象 网络编程 并发编程 数据 ...
随机推荐
- vue el-tree:默认展开第几级节点
需求描述: Tree 树形结构,默认展开第二级菜单. 查 element 文档: 解决方法: 设置 :default-expanded-keys 的值为 idArr 数组, <el-tree ...
- 021_mac提效神奇Alfred
一.破解版下载 (1)https://pan.baidu.com/s/1Kb0HtybvdA1yzHeOWUFM_w 提取码:9tq2 Reference:https://www.jianshu.co ...
- HBase基础架构及原理
1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...
- 开通博客的第一天上传我的C#基础笔记。
1.索引器 string arrStr = "sddfdfgfh"; 索引器的目的就是为了方便而已,可以在该类型的对象后面直接写[]访问该对象里面的成员 Console.Wr ...
- tornado的异步效果
第一种方式: import tornado.ioloop import tornado.web from tornado import gen from tornado.concurrent impo ...
- 加载UI工程的csb,以及纹理缓存情况
以plist+PNG模式加载csb,并播放UI工程做的动画,用法如下 local Layer = cc.CSLoader:createNode("res/yk/interface/loadi ...
- Android 各种路径详细说明
存储分类: 内部存储路径, 内部缓存存储路径, 外部存储路径, 外部缓存存储路径 在有些手机上内部划出一个内部的sdcard路径和内部存储路径,当有sdcard时候,就有了六个路径 内部存储空间中的应 ...
- 洛谷P3246 [HNOI2016]序列 [莫队]
传送门 思路 看到可离线.无修改.区间询问,相信一定可以想到莫队. 然而,莫队怎么转移是个大问题. 考虑\([l,r]\rightarrow[l,r+1]\)时答案会怎样变化?(左端点变化时同理) \ ...
- windows+mysql集群搭建-三分钟搞定集群
注:本文来源: 陈晓婵 < windows+mysql集群搭建-三分钟搞定集群 > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...
- Confluence 6 数据库 JDBC 驱动
本页面提供了支持的数据库的所有 JDBC 驱动下载链接. 基于许可证的原因,我们没有将 MySQL 或 Oracle 的数据库驱动整合到 Confluence 中,因此你需要在 Confluence ...