请求与响应
请求和响应是Web应用的基本组成部分,它们处理客户端(通常是浏览器)和服务器之间的交互。
注意三个常见的请求和响应就行:
【注意】:
关于重定向:
浏览器向某个网站发来请求,该网站返回了值,然后浏览器再自行去其他地方发送请求。
然后,补充一下关于请求的两种方法~
-
GET请求:
-
通常用于请求服务器发送资源。
-
数据通过URL传递,附加在URL后面,形成查询字符串。
-
GET请求可以被缓存、收藏为书签、保留在浏览器历史记录中。
-
由于数据暴露在URL中,不适合传输敏感信息,如密码或个人信息。
-
-
POST请求:
-
通常用于向服务器提交数据进行处理,例如表单提交。
-
数据在请求体中传递,不会显示在URL中。
-
POST请求不会被缓存,也不会保存在浏览器历史记录中,适合传输敏感信息。
-
因为POST请求的数据不会显示在URL中,所以它比GET请求更安全。
-
总的来说,出于安全考虑,当涉及到隐私信息,如密码、个人信息或任何不应公开的数据时,应使用POST方法。GET方法则适用于请求数据,且数据不包含敏感信息的情况。此外,GET请求有长度限制,而POST请求可以传输大量数据。
再整个案例练个手~
这是一个极度简洁的登录案例。
登录成功:
登录失败:
出现下面这种错误,是CSRF Token认证。
这是由于Django多了一层安全机制的校验。
如何解决这个问题呢?
要在HTML中的,form表单里写上一句 {% csrf_token %}
即可。
在这里补充一下关于CSRF:
CSRF(跨站请求伪造)是一种网络安全攻击,攻击者诱导受害者在不知情的情况下,利用受害者的登录状态向服务器发送恶意请求。
CSRF攻击利用了Web应用的漏洞,通过在用户不知情的情况下,使用用户的登录凭证来执行非法操作。
Django框架提供了CSRF token认证机制来防止这种攻击。
其原理就是: Django自动为每个用户会话生成一个唯一的CSRF token,当用户提交表单时,这个token需要包含在表单数据中,作为验证的一部分;当表单提交到服务器,Django会检查提交的CSRF token是否与服务器为当前会话生成的token相匹配。
数据库操作
在一般情况下,我们操作数据库都是得用pymysql的。
而在Django开发中,用它内部提供的ORM框架去操作数据库更简洁。
那么,ORM的最主要的功能就是翻译。将我们写的代码翻译给pymysql,这有利于我们开发时,代码编写的更加简洁。
ORM到底有什么用呢?
-
创建、修改和删除数据库中的表。(无需自己写SQL语句)【无法创建数据库】
-
操作表中的数据。(无需自己写SQL语句)
ORM框架
我们要如何使用它呢?
在使用前,首先要安装第三方模块。
pip install mysqlclient
然后,开始使用了!
-
自己创建数据库
启动MySQL服务,自己创建数据库。
-
Django连接数据库
在settings.py文件里修改配置。
(1)找到DATABASE(2)点击上面网站,去找到包含MySQL的内容
(3)复制官网代码到settings.py文件里,然后再进行修改
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", # 引擎 "NAME": "mydatabase", # 数据库的名字 "USER": "mydatabaseuser", # 用户名 "PASSWORD": "mypassword", # 密码 "HOST": "127.0.0.1", # 数据库在哪一台服务器上(这里是本机127.0.0.1) "PORT": "3306", # 端口号 } }
-
基于Django操作数据库表
(1)创建表
在models.py文件中,写上代码:from django.db import models class UserInfo(models.Model): name = models.CharField(max_length=32) password = models.CharField(max_length=64) age = models.IntegerField()
然后在终端执行下面两条命令(注意要在mysite目录下执行)
python manage.py makemigrations
python manage.py migrate
然后就创建成功
(2)删除表
把models.py文件里,需要删除的表对应的类注释掉,然后重新执行,makemigrations命令就好了~ 同理,要删除表的行或列,都可以这样。像这样:
(3)修改表
当要为一个已经存在的表(已有数据)新加一行或一列时,直接加在class里面运行makemigrations命令,会有两个选择:选择1:要输入一个值,使其新增的行或列都填入该值。
选择2:退出本次执行,在源码中加一个default默认值。height = models.IntegerField(default=0)
如果charfield需要加默认值,可以这样写:
name = models.CharField(max_length=32,default='Default Name')
PS: 如果需要添加一行默认为空的行或列,可以这样写:
data = models.IntegerField(null = True,blank=True)
在models.py文件中,写上代码 -
操作表中的数据