Django数据库的增删改查学习笔记

继:Django学习随记


【读取操作】

message/views.py文件

from django.shortcuts import render

from .models import UserMessage # 导入models的UserMessage类 其中.表示在同目录

# Create your views here.

def getform(request):
    all_message = UserMessage.objects.all()  # objects数据表管理器,all()返回所有数据库记录;返回QuerySet数据类型给变量
    for message in all_message:  # 返回的QuerySet数据类型是可循环的,可向操作类一样来操作数据库数据
        print message.name  # 比如我们要打印message_usermessage数据表中的name字段
    return render(request,'message_form.html')

数据库操作类型:

all()      =  返回所有记录

all_message = UserMessage.objects.all()

filter()  =  返回特定筛选记录

all_message = UserMessage.objects.filter(name='需要的值',address='北京') # 中文请记得头部 # _*_ coding:utf-8 _*_

【写入数据】:

message/views.py文件

from .models import UserMessage

# Create your views here.

def getform(request):
    user_message = UserMessage()  # 实例化
    user_message.name = "王二"
    user_message.message = "测试赛所所所"
    user_message.address = "上海"
    user_message.email = "[email protected]"
    user_message.object_id = "附近的空间放大看"
    user_message.save()  # 因为UserMessage类已经继承了models.Model,所以直接调用到了save()方法

    return render(request,'message_form.html')

运行完成后mysql数据库中就会新增了这些对应的记录


【表单提交和储存】

<form action="/form/" method="post" class="smart-green"> <!--action表示提交地址  method表示方法  class表示CSS类-->
    <h1>留言信息
        <span>请留下你的信息.</span>
    </h1>
    <label>
        <span>姓名 :</span>
        <input id="name" type="text" name="name" class="error" placeholder="请输入您的姓名"/>  <!--input会将数据提交到后台对应的name中-->
        <div class="error-msg"></div>
    </label>

    <label>
        <span>邮箱 :</span>
        <input id="email" type="email" value="" name="email" placeholder="请输入邮箱地址"/>
        <div class="error-msg"></div>
    </label>

    <label>
        <span>联系地址 :</span>
        <input id="address" type="text" value="" name="address" placeholder="请输入联系地址"/>
        <div class="error-msg"></div>
    </label>

    <label>
        <span>留言 :</span>
        <textarea id="message" name="message"  placeholder="请输入你的建议"></textarea>
        <div class="error-msg"></div>
    </label>
    <div class="success-msg"></div>
    <label>
        <span> </span>
        <input type="submit" class="button" value="提交"/>
    </label>
    {% csrf_token %}   <!--这个标签是django的安全提交机制,所有提交的表单必须要加上这个标签,否则无法通过-->
</form>

相应的我们也要把views.py文件接收处理POST请求:

def getform(request):

    if request.method == "POST":  # 判断是否是POST请求方式,如果不判断可能接收到的是空值,如果GET方法时
        name = request.POST.get('name','')  # 接收name值,如果为空时用空值替换
        message = request.POST.get('message','')
        address = request.POST.get('address','')
        email = request.POST.get('email','')

        user_message = UserMessage()  # 实例化
        user_message.name = name
        user_message.message = message
        user_message.address = address
        user_message.email = email
        user_message.object_id = "附2222"  # 主键是唯一的,如果相同的主键时数据库的数据将只相当于替换
        user_message.save()  # 因为UserMessage类已经继承了models.Model,所以直接调用到了save()方法



【数据库记录的删除】 还是message的app应用中views.py文件

def getform(request):
    all_message = UserMessage.objects.filter(name='啪啪啪',address='广东省东莞市')
    all_message.delete()  # 这样是删除整条查询到符合条件的所有记录
def getform(request):
    all_message = UserMessage.objects.filter(name='啪啪啪',address='广东省东莞市')
    for message in all_message:
        message.delete()  # 这样是删除循环到的单条记录


【获取数据库记录并显示到页面中】message的app应用中views.py文件

def getform(request):
    message = None
    all_message = UserMessage.objects.filter(name='abcd')  # 数据库中我们已经有条记录的name值为
    if all_message:     # 判断是否查询到记录
        message = all_message[0]  #如同操作数组一样来操作数据,也可以用切片的方式
        

    return render(request,'message_form.html',{
        "my_message":message
    })
    # render方法可以在后面传递数组,并且取值时类似字典的方法取键

在html页面中也要加入接收值的标签

<input id="name" type="text" value="{{ my_message.name }}" name="name" class="error" placeholder="请输入您的姓名"/>

在input标签中加入value="{{ my_message.name }}"  如果符合我们的查询条件就可以显示出这个name值了

而textarea标签略有不同,调取值是写在<textarea ...>获取值</textarea> 当中的。

<textarea id="message" name="message"  placeholder="请输入你的建议">{{ my_message.message }}</textarea>

Django的模板中并不能写入python逻辑,因为担心在模板中写入过多的逻辑所以限制了,但是还有其他的用法

<input id="name" type="text" value="{% if my_message.name == 'abcd' %}efghijk{% endif %}" name="name" class="error" placeholder="请输入您的姓名"/>

value="{% if my_message.name == 'abcd' %}efghijk{% endif %}" 

(判断语句,如果name值等于abcd时就显示efghijk,当然还要记得加入判断的结束标签)


同样的还可以使用else:

value="{% if my_message.name == 'abcd123' %}efghijk{% else %}EFGGG{% endif %}" 

(如果第一个判断语句不成立则执行else从而得到的显示值为EFGGG)


再同样的还可以使用not:

value="{% if not my_message.name == 'abcd123' %}efghijk{% else %}EFGGG{% endif %}" 

(如果不等于abcd123就显示efghijk)


另外还有 ifequal标签,需要传递两个值,第一个是对应的记录,第二个是要等于的值,因为我们数据库中并不存在abcd123,所以页面中显示的值为EFGGG

        <input id="name" type="text" value="{% ifequal my_message.name 'abcd123' %}efghijk{% else %}EFGGG{% endifequal %}" name="name" class="error" placeholder="请输入您的姓名"/>


标签函数的调用 |slice:

<input id="name" type="text" value="{% ifequal my_message.name|slice:'5' 'abcd1' %}efghijk{% else %}EFGGG{% endifequal %}" name="name" class="error" placeholder="请输入您的姓名"/>

slice:'5'  告诉django我们取5个字符  这里将会得到efghijk;如果我们取 6 个字符 将会得到EFGGG



猜你喜欢

转载自blog.csdn.net/qq_40134903/article/details/81054521