Django是Python中非常优秀的web框架,可以用来编写网站、博客、电商、企业软件。今天小编打算用Django提供的ModelForm操作数据库实现简单的增删改查,这种方法不用考虑SQL语句如何实现。
# 操作环境
1.Python 3.8
2.Django 3.0.2
3.Pycharm 2019.3
4.mysql 8.0.18
# 以下操作使用Pycharm完成,创建项目(mysite),创建应用(blog)
第一步:创建数据模型
# 模型名称:Article
# 模型字段:title、body、pub_time
# models.py
from.django.db import models
class Article(models.Model):
title = models.CharField('标题', max_length=128)
body = models.TextField('内容')
pub_time = models.DateTimeField('发布时间', auto_now_add=True)
class Meta:
verbose_name_plural = verbose_name = '文章管理'
def __str__(self):
return self.title
第二步:数据迁移
# 1.生成迁移文件
python manage.py makemigrations
# 2.执行数据迁移
python manage.py migrate
#3.在需要的情况下,创建后台超级用户
python manage.py createsuperuser
第三步:创建form.py(views.py同级目录)
# form.py
from django.forms import ModelForm
from blog.models import Article
class ArticleForm(ModelForm): # 继承ModelForm类
class Meta:
model = Article # 操作的数据模型
fields = ['title','body'] # 允许编辑的字段(pub_time定义的不可编辑)
第四步:创建视图,操作数据
# views.py
from django.shortcuts import render, redirect
from blog.models import Article
from blog.form import ArticleForm
def index(request):
# 首页,获取Article所有数据
articles = Article.objects.all()
return render(request,'index.html',{'articles':articles})
# 对应的url,在urls.py文件中设置
path('',views.index,name='index') # 引号中间为空表示首页
# 添加数据的视图
def add(request):
# 如果不是POST方法访问
if request.method != 'POST':
# 创建一个空表单在页面显示
form = ArticleForm()
else:
# 否则为POST方式
# request.POST方法获取表单中输入的数据
add_article = ArticleForm(request.POST)
# 使用is_valid()验证输入合法性
if add_article.is_valid():
# 验证通过,使用save方法保存数据
add_article.save()
#保存成功后,使用redirect()重定向指定页面
return redirect('/')
return render(request,'add_article.html',{'form':form})
# 编辑数据的视图
def update(request,article_id):
# 查询到指定的数据
article = Article.objects.get(id=article_id)
if request.method !='POST':
# 如果不是POST,创建一个表单,并用instance=article当前数据填充表单
form = ArticleForm(instance=article)
else:
# 如果是POST,instance=article当前数据填充表单,并用data=request.POST获取到表单里的内容
form = ArticleForm(instance=article,data=request.POST)
form.save()
if form.is_valid():
return redirect('/')
return render(request,'edit.html',{'form':form,'article':article})
# 删除数据的视图
# 这里删除数据是直接在首页执行,不需要另建模板
def delete(request,article_id):
article = Article.objects.get(id=article_id)
if not article:
message = '删除失败'
else:
article.delete()
return redirect('/')
return render(request,'del.html',{'article':article})
第五步:设置所有视图的url
# urls.py
from django.urls import path
from blog import views
urlpatterns = [
path('',views.index,name='index'), #首页
path('add/',views.add,name='add'), #添加数据
path('update/<int:article_id>',views.update,name='update'), #编辑数据
path('delete/<int:article_id>',views.delete,name='delete'), #删除数据
]
第六步:静态模板调用
<!--index.html-->
<table>
<thead>
<tr>
<th>编号</th>
<th>标题</th>
<th>内容</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
{% for article in articles %}
<td>{{ article.id }}</td>
<td>{{ article.title }}</td>
<td>{{ article.body }}</td>
<td>{{ article.pub_time }}</td>
<td>
<a href="{% url 'edit' article.id %}">编辑</a>
<a href="{% url 'delete' article.id %}">删除</a>
</td>
{% endfor %}
</tr>
</tbody>
</table>
<!--add.html-->
<form action="{% url 'add' %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value='提交'>
</form>
<!--edit.html-->
<form action="{% url 'edit' article.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value='提交'>
</form>