【读取操作】
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 = "2@2.com"
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