之前我们介绍过web应用程序和http协议,简单了解过web开发的概念。Web应用程序的本质
- 接收并解析HTTP请求,获取具体的请求信息
- 处理本次HTTP请求,即完成本次请求的业务逻辑处理
- 构造并返回处理结果——HTTP响应
import socket
server = socket.socket()
server.bind(('127.0.0.1',8000))
server.listen(5)
while True:
conn,addr = server.accept()
data = conn.recv(1024)
print("data:\n", data)
即一般我们接受到的数据就是一串网络报文
那么我们可以根据返回的一些内容进行路径的解析
request_path = data.decode('utf-8').split('\r\n')[0].split(' ')[1]
if request_path == '/':
with open("index.html", "rb") as f:
data = f.read()
conn.send(b'HTTP/1.1 200 OK\r\n\r\n' + data)
elif request_path == '/timer':
with open("login.html", "rb") as f:
data = f.read()
conn.send(b'HTTP/1.1 200 OK\r\n\r\n' + data)
else:
with open("notFound.html", "rb") as f:
data = f.read()
conn.send(b'HTTP/1.1 404 Not Found\r\n\r\n' + data)
每次的分发路由会有很多个,依次罗列会非常麻烦,所以进入一个web框架的概念
Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。
说简单点就是web框架用于搭建Web应用程序,免去不同Web应用相同代码部分的重复。

Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。
这个MVT模式并非django首创,在其他的语言里面也有类似的设计模式MVC,甚至可以说django里面的MVT事实上是借鉴了MVC模式衍生出来的。
M,Model,模型,是用于完成操作数据库的。
V,View,视图,里面的代码就是用于展示给客户端的页面效果。
C,Controller,控制器,是一个类或者函数,里面的代码就是用于项目功能逻辑的,一般用于调用模型来获取数据,获取到的数据通过调用视图文件返回给客户端。
而MVT指的是:
- M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
- V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
- T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
路由控制器将请求转发给对应的视图函数,完成业务逻辑,视图函数将从model中获取的数据嵌入到template的中模板文件(html)渲染成一个页面字符串,返回给客户端的流程。
所以学习Django重点是四个部分:url路由器+MVT
官网: http://www.djangoproject.com
文档:https://docs.djangoproject.com/zh-hans/3.2/
在本地安装
pip install django
pip install django==3.2
pip源:
https://pypi.douban.com/simple/ 豆瓣源
https://pypi.tuna.tsinghua.edu.cn/simple 清华源
使用格式:
pip install django -i https://pypi.douban.com/simple/
# 查看django版本号
django-admin --version
当然在以后开发或者学习中,我们肯定都会遇到在一台开发机子中,运行多个项目的情况,有时候还会出现每个项目的python解析器或者依赖包的版本有差异.

创建好了虚拟环境可以直接运用命令建立一个django文件,命令有下面这些
ivanlee@ivanleedeMacBook-Pro ~ % django-admin
Type 'django-admin help <subcommand>' for help on a specific subcommand.
Available subcommands:
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
使用startproject可以新建一个项目

建立好项目以后,他会自带的形成很多的目录文件框架
ivanlee@ivanleedeMacBook-Pro Desktop % tree Regina
Regina
├── Regina
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1 directory, 6 files
通过命令行python3 manage.py runserver ip_port就可以直接启动,在网页上访问8090端口会显示一个静态模板网页


pytho3 manage.py startapp appName
ivanlee@ivanleedeMacBook-Pro Regina % tree
.
├── Regina
│ ├── __init__.py
│ ├── asgi.py django3.0以后新增的,用于让django运行在异步编程模式的一个web应用对象
│ ├── settings.py 默认开发配置文件
│ ├── urls.py 路由列表目录,用于绑定视图和url的映射关系
│ └── wsgi.py wsgi就是项目运行在wsgi服务器时的入口文件,runserver默认启动的wsgi.py文件作为web服务器接口
├── Reginaapp 子应用
│ ├── __init__.py
│ ├── admin.py 该应用的后台管理系统配置
│ ├── apps.py 该应用的一些配置,自动生成
│ ├── models.py 该应用的模型类模块
│ ├── tests.py 该应用的单元测试模块
│ └── views.py 该应用的视图模块
├── db.sqlite3
└── manage.py 终端脚本命令,提供了一系列用于生成文件或者目录的命令,也叫脚手架
4 directories, 18 files
当然如果每次运行项目都要在终端下输入命令的话,很麻烦,这时候我们可以借助pycharm直接自动运行这段命令.当然,这个需要我们在pycharm配置一下的.

找到这个默认参数的位置,如果里面是空的,那么在运行manage.py的时候会自动报停,因为后面没有任何的命令参数



在django中要提供数据展示给用户,我们需要完成3个步骤.
需求:利用Django实现一个查看当前时间的web页面。
基于MTV模型,设计步骤如下:
- step1:在urls.py中设计url与视图的映射关系。
- step2:创建子应用,在views.py中构建视图函数。
- step3:将变量嵌入到模板中返回客户端。

在djangoRegina.urls.py的文件里会自带一个默认的路由
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
如果这个文件不被修改的话,访问8090端口的时候默认就会显示一个静态页面,但如果手动添加了其他代码和路由进来的话,那么默认路由也会失效


那在自己编写路由的时候,可以分为以下两种情况
from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponse 所有的网络报文必须都是同一种格式,所以导入这个模块方便了我们信息交换
def get_ZJR(request): 这个函数叫做视图函数
return HttpResponse("<img src='xxxx.jpeg'>") 返回一个已经封装好的报文
urlpatterns = [
path('admin/', admin.site.urls),
path('ZJR/', get_ZJR),
]

因为如果过多的视图函数都堆积在路由区域,代码会非常的复杂,所以可以归类到一个文件当中:ReginaApp.views.py
from django.shortcuts import render, HttpResponse
# Create your views here.
def get_ZJR(request):
return HttpResponse("<img src='https://images.cnblogs.com/cnblogs_com/blogs/751189/galleries/2161669/o_220713040648_WechatIMG275.jpeg'>")
def get_name(request):
return HttpResponse("hello Ms JiaRui")
再在djangoRegina.urls.py里进行导入
from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponse
from ReginaApp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('ZJR/', views.get_ZJR),
path('name/', views.get_name), 这里的路由视图函数一定不加括号
]

本身在与项目同名的子文件下的setting.py里,会有一个配置模板文件的目录

首先检查这个地方是否填充了目录,一般来说是自己带着的,之后在manage.py的同根目录下建立一个templates文件夹,里面虽然存放的都是html文件,但在django里叫做模板文件
def get_ZJR(request):
return render(request,"regina.html")
这样再导入的时候,就会去找templates/regina.html

def get_ZJR(request):
now = datetime.datetime.now().strftime("%Y-%m-%d %X")
return render(request,"regina.html",{"now":now})
将要动态渲染的内容以字典的形式附加在函数末尾,在模板文件里被渲染的部分用{{}}引用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
span{
color:red;
}
.i1{
width: 200px;
height: 300px;
}
</style>
</head>
<body>
<h3>IvanleeZJR <span>{{now}}</span></h3>
<img class="i1" src="https://images.cnblogs.com/cnblogs_com/blogs/751189/galleries/2161669/o_220713040648_WechatIMG275.jpeg" alt="">
</body>
</html>

目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk=Var(yt)Cov(yt,yt−k)其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。有没有学习Ajax(jQuery)和Rails3的好资源?