Day4

请求与响应

请求和响应是Web应用的基本组成部分,它们处理客户端(通常是浏览器)和服务器之间的交互。

注意三个常见的请求和响应就行:

【注意】:

关于重定向:

浏览器向某个网站发来请求,该网站返回了值,然后浏览器再自行去其他地方发送请求。

然后,补充一下关于请求的两种方法~

  1. GET请求

    • 通常用于请求服务器发送资源。

    • 数据通过URL传递,附加在URL后面,形成查询字符串。

    • GET请求可以被缓存、收藏为书签、保留在浏览器历史记录中。

    • 由于数据暴露在URL中,不适合传输敏感信息,如密码或个人信息。

  2. 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到底有什么用呢?

  1. 创建、修改和删除数据库中的表。(无需自己写SQL语句)【无法创建数据库】

  2. 操作表中的数据。(无需自己写SQL语句)

ORM框架

我们要如何使用它呢?

在使用前,首先要安装第三方模块。

pip install mysqlclient

然后,开始使用了!

  1. 自己创建数据库

    启动MySQL服务,自己创建数据库。

  2. 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",                            # 端口号
        }
    }
  3. 基于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文件中,写上代码

  4. 操作表中的数据

在views.py里写下面语句。

【注意】一定要导入创建好的表。

如果单纯想要为表中的某一列做约束(不涉及关联),可以这样写:

gender_choices = ((1,"男"),(2,"女"))

gender = models.SmallIntegerField(verbose_name="性别", choices = gender_choices)

如果遇到两个表之间需要关联的,某一列需要约束的,可以这样写:
x = models.ForeignKey(to='chart1', to_field='id')

如果两个关联表中,有一个关联的部分被删除了,则另外一个表一般有两种解决方案:

  • 相关部分一起删除(级联删除)。

    x = models.ForeignKey(to='chart1', to_field='id',on_delete=models.CASCADE)

  • 相关部分变为空。

    x=models.ForeignKey(to='chart1',to_field='id',null=True,blank=True,on_delete=SET_NULL)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值