Django + MySQL的增删查改
本项目只有代码的呈现,并不包括环境的调试以及数据库的连接等等。
本栏主要介绍Django对MySQL数据库的增删查改操作
models.py:
class Message(models.Model):
text1 = models.CharField(max_length=256, verbose_name='链接')
text2 = models.CharField(max_length=256, verbose_name="文字")
def to_dict(self):
return {
'text1': self.text1,
'text2': self.text2,
}
增加操作:
views.py:
def message_add(request):
# 定义一个增加函数
if request.method == 'POST':
# 如果是POST请求方式,就获得text1和text2
text1 = request.POST.get('text1')
text2 = request.POST.get('text2')
models.Message.objects.create(
# create添加数据
text1=text1,
text2=text2
)
return redirect('/message/')
# 调用函数message
def message(request):
# 显示函数-显示数据信息
messages = models.Message.objects.all()
# 从数据库中获取数据保存在字典中
return render(request, 'index/message.html', {'messages': messages})
# index/message.html展示的页面,{'messages': messages}字典
index/message.html
<form action="/message/" method="post">
<table class="table">
<tr>
<td>资讯链接</td>
<td>资讯标题</td>
</tr>
{% csrf_token %}
<!-- csrf_token自己了解 -->
{% for foo1 in messages %}
<!-- 遍历字典,显示数据库中的对应信息 -->
<!-- 数据的显示无关form action -->
<tr>
<td>{{ foo1.text1 }}</td>
<td>{{ foo1.text2 }}</td>
<td>
<button type="button" class="btn btn-default"><a href="/message_jump/?id={{ foo1.id }}"
target="_Blank">修改</a></button>
<!-- /message_jump/?id={{ foo1.id }}中是为了得到该条数据的对应id号,-->
<!-- 由于django在没有models中没有设置主键的话,会自动生成id主键并未自增类型,-->
<!-- 所以在这里得到的是该条数据的id,从而在调用message_jump时获得id即:request.GET.get("id")并由此得到对应那条数据,下同-->
</td>
<td>
<button type="button" class="btn btn-default"><a href="/message_delete/?id={{ foo1.id }}"
target="_Blank">删除</a></button>
</td>
</tr>
{% endfor %}
</table>
</form>
<form action="/message_add/" method="post">
<table class="table">
<tr>
<td>资讯链接</td>
<td>资讯标题</td>
</tr>
{% csrf_token %}
<tr>
<td><label>
<input type="text" name="text1">
</label></td>
<td>
<label for="">
<input type="text" name="text2">
</label>
</td>
<td><label for=""><input type="submit" value="提交"></label></td>
<!-- 当你填充内容之后,点击提交,会执行form中的action也就是message_add函数,请求方法是post,就会将table的内容提交上去,进而在数据库中添加 -->
</tr>
</table>
</form>
<!--使用的是bootstrap做的前端,使用的是模态框,所以看起来内容比较多一点,找多对应的action,name之类的就好容易一点-->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="myModalLabel">
查询
</h4>
</div>
<form class="navbar-form navbar-right modal-body" role="search" action="/search/" method="post">
<div class="form-group col-sm-12">
<label for="">链接 :
<input type="text" class="form-control" placeholder="Search" name="text1"></label>
</div>
<div class="form-group col-sm-12">
<label for="">文字 :<input
type="text" class="form-control" placeholder="Search" name="text2"></label>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭
</button>
<button type="submit" class="btn btn-primary">
提交更改
</button>
</div>
<hr>
</form>
</div>
</div>
</div>
删除:
views.py
def message_delete(request):
# 定义一个删除函数
message_id = request.GET.get('id')
# 从前端获取id
line = models.Message.objects.get(id=message_id)
# 删除id=message_id那条数据
line.delete()
return redirect('/message/')
# 调用显示函数,对应的前端代码在 index/message.html
修改:
views.py
def message_jump(request):
# 当你点击前端的修改按钮是,调用该函数
messages_id = request.GET.get("id")
# 获得id
request.session['messages_id'] = messages_id
# 将该id缓存起来
return redirect('/message_page/')
# 调用函数
def message_page(request):
return render(request, 'index/message_update.html')
# 跳转修改页面
def message_update(request):
# 修改函数
message_id = request.session['messages_id']
if request.method == 'POST':
text1 = request.POST.get('text1')
text2 = request.POST.get('text2')
models.Message.objects.filter(id=message_id).update(
#当id = 缓存的id时候,进行update修改
text1=text1,
text2=text2
)
return redirect('/message/')
对应的修改的界面:
'index/message_update.html'
<form action="/message_update/" method="post">
<table>
<tr>
<td>资讯链接</td>
<td>资讯标题</td>
</tr>
<tr>
<td><label>
<input type="text" name="text1">
</label></td>
<td>
<label for="">
<input type="text" name="text2">
</label>
</td>
<td>
<button type="submit" class="btn btn-default">提交</button>
</td>
</tr>
</table>
</form>
查找:
注意在models.py中定义的函数to_dict
models.py
class Message(models.Model):
text1 = models.CharField(max_length=256, verbose_name='链接')
text2 = models.CharField(max_length=256, verbose_name="文字")
def to_dict(self):
return {
'text1': self.text1,
'text2': self.text2,
}
views.py
def search(request):
if request.method == 'POST':
text1 = request.POST.get('text1')
text2 = request.POST.get("text2")
search_dict = dict()
if text1:
search_dict['text1'] = text1
if text2:
search_dict['text2'] = text2
text_order_info = PhoneInf.objects.filter(**search_dict)
messages = [text_order.to_dict() for text_order in text_order_info]
messages = {
'messages ': messages
}
return render(request, 'index/message.html', messages )