Django注意点

get请求和post请求

django获取前端请求方式: request.method

  1. 获取get请求提交的数据:
request.GET # 携带了前端所有get请求的数据
username = request.GET.get('username')
password = request.GET.get('password')
# 取值遵循字典取值,注意虽然它的value是列表但是你取的时候默认取列表最后一个元素

# 如果想获取列表里面所有的参数:
getlist() # 应用场景:checkbox、多选的select框
复制代码
  1. 获取get请求提交的数据:
request.POST # 携带了前端所有get请求的数据
username = request.POST.get('username')
password = request.POST.get('password')
# 取值遵循字典取值,注意虽然它的value是列表但是你取的时候默认取列表最后一个元素

# 如果想获取列表里面所有的参数:
getlist() # 应用场景:checkbox、多选的select框
复制代码

Django中ORM的注意点

Django连接mysql数据库

  1. 配置文件注意点:变量名必须全部是大写,否则无效
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'USER':'用户名',
        'PASSWORD':'密码',
        'HOST':'IP',
        'PORT':'端口号'
    }
}
复制代码
  1. 使用Django orm它不会自动帮你创建库,需要你手动创建
  2. 能帮你自动干的事:自动帮你创建表
  3. Django默认使用的是 MySQLdb模块
#连接数据库告诉Django用pymysql这个模块去连接MySQL,在settings.py同目录下的__init__.py文件中,指定使用pymysql模块代替MySQLdb,代码如下:
import pymysql
pymysql.install_as_MySQLdb
复制代码

数据库迁移命令

python manage.py makemigrations # 这一句命令只是记录一下数据库更改记录
python manage.py migrate # 真正去操作数据库
复制代码

ORM中与增删改查相关操作

表的增删改

直接在类中删除即可

直接在类中修改即可

重点

只要动了models.py中涉及表的代码,就必须重新执行数据库迁移命令,缺一不可,且顺序不可颠倒。

python manage.py makemigrations # 这一句命令只是记录一下数据库更改记录
python manage.py migrate # 真正去操作数据库
复制代码

表数据的增删改查

# 方式1:新增数据操作   返回值就是当前被创建对象本身
user_obj = models.User.objects.create(name=username,password=password,addr=addr)
# 方式2:
user_obj = models.User(**request.POST)
user_obj.save()
复制代码
def delete_user(request):
# 获取被删除对象的id
delete_id = request.GET.get('id')
# queryset自带delete方法,删除queryset里面所有的数据对象
# queryset调delete()执行的批量操作 删除的是queryset里面所有的数据
affect_rows = models.User.objects.filter(id=delete_id).delete()
print(affect_rows)
return redirect('/userlist')
# 前端
<a href="/delete_user/?id={{ user_obj.id }}" class="btn btn-danger btn-sm">删除</a>
复制代码
改:

思路:先获取到底改哪条数据 查询该数据 渲染到前端页面供用户查看及修改 post请求中获取被修改对象的id两种方式:

  1. input隐藏标签
  2. action携带参数
<form action="/edit_user/?id={{ edit_obj.pk }}" method="post">
    <input type="hidden" value="{{ edit_obj.pk }}" name="id">
    <p>username:<input type="text" name="username" class="form-control" value="{{ edit_obj.name }}"></p>
    <p>password:<input type="password" name="password" class="form-control" value="{{ edit_obj.password }}"></p>
    <p>addr:<input type="text" name="addr" class="form-control" value="{{ edit_obj.addr }}"></p>
    <input type="submit" class="btn btn-success">
</form>
两种修改数据的方式:
# 修改数据方式1
models.User.objects.filter(id=id2).update(name=username,password=password,addr=addr)
# 修改数据方式2
edit_obj = models.User.objects.filter(id=id2).first()
edit_obj.name = username
edit_obj.password = password
edit_obj.addr = addr
edit_obj.save()
复制代码
  1. orm查询user表所有数据

models.User.objects.all()

  1. orm查询user表的某条数据

user_queryset = models.User.objects.filter(name=username,password=password)

注意:只有queryset对象才能够.query获取当前queryset对象所对应的sql语句

user_obj.query 
  SELECT
             `app01_user`.`id`,
             `app01_user`.`name`,
             `app01_user`.`password`
  FROM
             `app01_user`
  WHERE
            ( `app01_user`.`name` = jason AND `app01_user`.`password` = 123 )
复制代码

  1. 如果想获取对应的模型表对象,需要通过"索引取值"的方式,回去真正的数据对象
  2. queryset支持正数索引取值,但是不推荐你直接用索引,推荐你用orm给你封装的first()

user_obj = models.User.objects.filter(name=username,password=password).first()

  1. 只有取出真正的模板表对象,才能通过点的方式操作对应数据库的某条数据

需要加在models中的类中

# 对于已经有数据的表,新增字段的时候,要设置默认值
addr = models.CharField(max_length=32,default='China')
# 或者指定该字段可以为空
phone = models.CharField(max_length=32,null=True)
复制代码

前端

前端
# 模板语法之for循环 循环展示数据    可以直接敲for tab键自动补全for循环语法
{% for user_obj in user_list %}
<tr>
	<td>{{ user_obj.id }}</td>
	<td>{{ user_obj.name }}</td>
	<td>{{ user_obj.password }}</td>
	<td>{{ user_obj.addr }}</td>
	<td class="text-center">
		<a href="/edit_user/?id={{ user_obj.pk }}" class="btn btn-primary btn-sm">编辑</a>
		<a href="/delete_user/?id={{ user_obj.id }}" class="btn btn-danger btn-sm">删除</a>
	</td>
</tr>
{% endfor %}
复制代码

转载于:https://juejin.im/post/5cb095016fb9a068a37296f0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值