Django基础——Web框架原理

所有的web应用的本质就是一个socket服务端,而浏览器就是一个socket客户端;

以前我们自己在电脑上写的socket服务端和客户端的通信,我们知道客户端会向服务端发来什么格式的消息,然后我们用服务端去用相应的格式给接收它,其实两者之间,是靠自己定的一个通信的协议。

而现在客户端是用户的浏览器了,因此还想使浏览器的客户端与服务端进行通信,就必须要遵循HTTP协议了(本质上就是接收消息的格式要求)HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

有关于HTTP协议:

  1.浏览器往服务端发的叫做 请求(request);

  请求消息的格式:

 

  请求方法 路径 HTTP/1.1\r\n
  k1:v1\r\n
  k2:v2\r\n
  \r\n
  请求数据

HTTP请求方法通常有两种;一是GET请求;二是PSOT请求;

  GET请求:通常是请求服务端返回一个页面(读取数据);

  PSOT请求:通常是表单提交数据

2.服务端往浏览器发的叫 响应(response);

  响应的格式:

 

  HTTP/1.1 状态码 状态描述符\r\n
  k1:v1\r\n
  k2:v2\r\n
  \r\n
  响应正文 <-- html的内容

 

HTTP的状态码

状态代码的第一个数字代表当前响应的类型:

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

  例如"200 OK","404 Not Found"


动态的网页:
  本质上都是字符串的替换
字符串替换发生在什么地方:
  在服务端替换完再返回给浏览器!!!

 

一个完整得请求流程:

  1.首先启动服务端,等待客户端(用户的浏览器)来连接;

  2.在浏览器的地址栏键输入URL,按下回车键后就与服务端建立了连接,浏览器就向服务端发送了请求;

  3.服务端接收到请求消息后,按照HTTP协议来解析消息;根据路径和函数的对应关系,找到将要执行的函数;

  4.执行函数,打开HTML文件,进行字符串的替换,得到一个最终要返回的HTML的内容;

  5.按照HTTP协议的消息格式要求,把HTML内容回复给用户的浏览器(这一动作就是发送响应);

  6.浏览器收到响应的消息之后,就会按照HTML的规则来渲染页面,把最终的页面呈现个用户的浏览器上;

    

总结:  

1. web框架的本质:
  socket服务端 与 浏览器的通信
2. socket服务端功能划分:
  a. 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...
  b. 根据用户访问不同的路径执行不同的函数
  c. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)

3. Python中 Web框架的分类:
1. 按上面三个功能划分:
  1. 框架自带a,b,c --> Tornado
  2. 框架自带b和c,使用第三方的a --> Django
  3. 框架自带b,使用第三方的a和c --> Flask
2. 按另一个维度来划分:
  1. Django --> 大而全(你做一个网站能用到的它都有)
  2. 其他 --> Flask 轻量级

转载于:https://www.cnblogs.com/zenghui-python/p/10800165.html

Django是一个流行的高级Python Web框架,它提供了很多内置的功能,包括一个强大的ORM(对象关系映射)系统和用于快速搭建应用的能力。如果要在Django中创建一个通知(Notification)应用程序,通常会涉及以下几个步骤: 1. **模型设计**:首先,你需要定义一个`Notification`模型,包含基本的信息如标题、内容、发送者和接收者等。可能还会有一个状态字段(如已读/未读)。 ```python from django.db import models class Notification(models.Model): title = models.CharField(max_length=200) content = models.TextField() sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_notifications') recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_notifications') is_read = models.BooleanField(default=False) ``` 2. **视图处理**:对于用户接收和管理通知,你可以创建视图函数来显示通知列表、标记为已读、删除通知等。例如,展示通知可能涉及到从数据库获取用户的通知并分页展示。 3. **模板渲染**:创建HTML模板,比如`notifications.html`,用于显示通知详情或通知列表。 4. **信号和任务**:如果需要异步处理(比如通过邮件、推送通知等),可以使用Django的信号系统结合Celery或其他任务队列工具。 5. **URL配置**:在urls.py文件中设置路由,将用户访问通知的URL映射到相应的视图函数。 6. **权限管理**:为了保护用户的隐私,可能需要对哪些用户可以看到特定通知进行权限控制。 完成以上步骤后,用户就可以在Django网站上看到和管理他们的通知了。如果你有更具体的问题,比如如何实现某种功能或者遇到技术难题,欢迎提问:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值