Django学习记录02

1.请求与响应

1.1get与post的区别

get 一般是从url输入地址,会调用get请求
post 一般是内部数据传输
# get请求
def something(request):
    # req是一个对象,封装了用户发送过来的所有请求相关数据
    # 1.获取请求方式  http://localhost:8000/something
    # print(request.method)
    
    # 2.在url上传递值  http://localhost:8000/something/?n1=123&n2=999
    # print(request.GET)
# post请求
直接利用表单传输,而不需要使用url

<form method="post" action="/login/">
{#    django的安全性措施,必须加该句话#}
    {% csrf_token %}

    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="pwd" placeholder="密码">

    <input type="submit" value="提交"><font style="color: red"> {{ error }}</font>
</form>

1.2 Django响应的几种方式

def something(request):
    req是一个对象,封装了用户发送过来的所有请求相关数据

    响应 1.响应请求者的请求
    return HttpResponse("返回浏览器,响应!")

    响应 2.读取html的内容+渲染,返还给浏览器字符串
    return render(request, "something.html")

    响应 3.重定向
    return redirect("http://www.baidu.com")

重定向

在这里插入图片描述

1.浏览器发出请求
2.django响应,告诉浏览器重定向的位置
3.浏览器向http://www.baidu.com发出请求
4.http://www.baidu.com响应浏览器

1.3 请求与相应案例分析

登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>登陆页面</h1>
<form method="post" action="/login/">
{#    django的安全性措施,必须加该句话#}
    {% csrf_token %}

    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="pwd" placeholder="密码">

    <input type="submit" value="提交"><font style="color: red"> {{ error }}</font>
</form>
</body>
</html>

{% csrf_token %} 常见的Django安全性方式

DJango实现

1.接收浏览器请求与响应

	若是在url中输入访问地址(get请求),则响应登陆界面
	若为表单的post请求,则利用request.POST获取接收表单传来的字典封装的数据,进行比对
2.对于post请求,进行比对后,比对成功响应浏览器,重定向;比对失败,返回登陆页面
def login(request):
    # get 请求,url所请求的
    # post请求,内部的数据传输
    error = ''
    # 在url中输入地址(get请求),则返回登陆页面
    if request.method == 'GET':
        return render(request, 'login.html', {"error": error})

    # 若是post请求,则获取数据(返回一个字典{"name":"value"})
    print(request.POST)
    # 获取数据
    username = request.POST.get("user")
    password = request.POST.get("pwd")

    if username == 'admin' and password == '123':
        return redirect('https://www.chinaunicom.com/')

    error = '登陆失败'
    return render(request, 'login.html', {"error": error})

2.数据库操作

2.1orm框架的应用原理

在这里插入图片描述

安装第三方模块

pip install mysqlclient

作用

  • 创建、修改、数据库中的表(不需要sql语句)
  • 增删改查表中数据(不需要sql语句)

2.2 django连接数据库

在settings.py文件中进行配置和修改。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db1',  # 数据库名称
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'PORT': 3306,
    }
}

在这里插入图片描述

2.3django操作表

  • 创建表

在models.py文件中

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
    # 新增列时(已有数据),执行该程序,必须确定新增属性的默认值
    size = models.IntegerField(default=2)

本质

    自动创建名为 app_类名(自动小写) 的表
    creat table app01_userinfo(
        id bigint auto_increment primary key,
        name varchar(32),
        password varchar(64),
        age int
        size int default=2
    )

执行命令

python manage.py makemigrations
python manage.py migrate
  • 删除表

直接删除models.py中相关表信息或相关列信息,重新执行命令即可

执行命令

python manage.py makemigrations
python manage.py migrate
  • 修改表

在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:设置默认值

age = models.IntegerField(default=2)

执行命令

python manage.py makemigrations
python manage.py migrate

2.4数据库表的增删改查操作

引用表的两种方式
1.表名.
from app01.models import UserInfo
UserInfo.xxx
2.
import app01.models
models.UserInfo.xxx

2.4.1增加操作

######  插入数据  ######
    UserInfo.objects.create(name='殷琪尧', password='123456', age=10, size=50)
    UserInfo.objects.create(name='yyy', password='12345622', age=15)
    UserInfo.objects.create(name='琪尧', password='123222456', age=20)
    
    
本质:
insert into app01_userinfo(name, password, age, size) values ('殷琪尧','123456',10,50);
insert into app01_userinfo(name, password, age) values ('yyy','12345622',10);
insert into app01_userinfo(name, password, age) values ('琪尧','123222456',10);

2.4.2查询操作

返回符合条件的所有数据 [数据对象,数据对象,数据对象] QuerySet类型

queryset1 = UserInfo.objects.filter(id=1)
for data in queryset1:
    print(data.name, data.age, data.size)

# 返回所有数据queryset类型
queryset2 = UserInfo.objects.all()
for data1 in queryset2:
    print(data1.name, data1.age, data1.size)

# 返回符合条件的第一条数据(dict)
data_list = UserInfo.objects.filter(size=2).first()
print(data_list3.name, data_list3.age, data_list3.size)

#  queryset1、queryset2均为[数据对象,数据对象,数据对象] QuerySet类型
# data_list 为字典
本质
select 'name',age,size from app01_userinfo where id=1;
select * from app01_userinfo;
select * from app01_userinfo where size=2;

2.4.3删除数据

######  删除数据  #####
UserInfo.objects.filter(id=3).delete()
UserInfo.objects.all().delete()
本质
delete from app01_userinfo where id=3;
delete from app01_userinfo

2.4.4更新数据

##### 更新数据  #####
UserInfo.objects.filter(id=3).update(name="火麒麟")
UserInfo.objects.all().update(password = "999999")
本质
update app01_userinfo set name='火麒麟' where id=3;
update app01_userinfo set password='999999'
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoin.

感谢各位打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值