首先,在day03,目录下的setting.py文件中配置连接数据的参数(的MySQL为例)
DATABASES = {
'default': {
# 连接数据库的类型,最后一位
'ENGINE': 'django.db.backends.mysql',
#连接数据库的地址
'HOST': '127.0.0.1',
#端口
'PORT': 3306,
# 数据库名称
'NAME': "day61",
#用户
'USER': 'root',
#密码
'PASSWORD': '*************'
}
}
然后,在__init__.py文件中添加如下代码
import pymysql
#告诉Django,用pymysql代替MySQLdb(MySQLdb不支持中py3)
pymysql.install_as_MySQLdb()
ORM对数据库操作基于对类级与数据对应关系,所以,在app01中的models.py中新建一个类
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 创建自增的一个主键
name = models.CharField(null=False, max_length=64, unique=True) #varchar且不能为空的字段
若使用pycharm或的IntelliJ,直接点击终端,执行ORM的数据库更新语句:
python manage.py makemigrations # 将类(数据库)的变化提交
python manage.py migrate # 执行变化
执行完毕,即已新建或更新数据库,如报错检查数据库及相关服务是否启动
首先在day03中的urls.py中添加如下的URL对应关系,对应增,删,改,查
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from .views import yimi, xiaohei
from app01 import views
# 注意上面最后两句引用,对应你的实际对应关系
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^publisher_list/', views.publisher_list),
url(r'^add_publisher/', views.add_publisher),
url(r'^delete_publisher/', views.delete_publisher),
url(r'^edit_publisher/', views.edit_publisher),
url(r'^test/', views.test),
]
让数据库中所有内容在HTML界面显示出来
#展示所创建的数据表中的内容(查)
def publisher_list(request):#order_by("id") 按照ID排序
ret = models.Publisher.objects.all().order_by("id")#数据库中查询所有用户,利用orm
# print(ret[0].id, ret[0].name)
# 得到的是两个UserInfo object对象,因为models的class对应的表中,暂时只有两条数据
return render(request, "publisher_list.html", {"publisher_list": ret})
publisher.py代码如下:
内容列表项
添加出版社
序号
ID
出版社名
操作
{% for publisher in publisher_list %}
{{ forloop.counter }}
{{ publisher.id }}
{{ publisher.name }}
删除
编辑
{% endfor %}
在数据内添加些示例数据,使用编辑器右侧边自带的小工具:
选择你需要用的数据库,这里以MySQL的为例
下面需要你填的:数据库名称,用户名,密码(左下角驱动自行点击下载下来)
效果展示:
#删除数据(删)
def delete_publisher(request):
del_id = request.GET.get("id",None) # 获取到get请求的参数中的id内容
del_name = request.GET.get("name",None)
print("删除ID为{0},名称为‘{1}’的数据".format(del_id,del_name))
if del_id:
del_obj = models.Publisher.objects.get(id=del_id) # 继承models中的数据库类
del_obj.delete() # 删除操作
return redirect("/publisher_list/")
else:
return HttpResponse("ERROR,检查数据后再试") #若不存在数据或其他错误
我们已经在第一部中添加了URL对应关系,直接编写函数,删除后直接跳转到展示界面,终端中显示你删除的数据
#增加数据(增)
def add_publisher(request):#第一次请求页面的时候,返回一个页面,页面有两个填写框
error_msg = ""
if request.method == "POST":
new_name = request.POST.get("publisher",None)# print(new_name)
print("你添加的出版社名称为:{0}".format(new_name))
models.Publisher.objects.create(name=new_name)#数据库中新创建一条数据行
return redirect("/publisher_list/") # redirect返回方法 HttpResponse返回字符串
else:
error_msg = "出版社名称不能为空"
return render(request, "add_publisher.html", {"error":error_msg})#render完成HTML界面替换
#编辑出版社(更新操作)(改)
def edit_publisher(request):
if request.method == "POST":
print(request.POST)
edit_id = request.POST.get("publisher_id")
new_name = request.POST.get("publisher_name")
edit_publisher = models.Publisher.objects.get(id=edit_id)
edit_publisher.name = new_name
edit_publisher.save() # 把修改提交到数据库
#跳转到出版社列表页,查看是否修改
return redirect("/publisher_list/")
edit_id = request.GET.get("id")
if edit_id:
publisher_obj = models.Publisher.objects.get(id=edit_id)#获取到数据内的这条记录,
# 在html界面的替换语句那里加上.name表示,获取这条记录中的name值(套路)
return render(request,"edit_publisher.html", {"publisher": publisher_obj})