基础配置:
新创一个django项目,取名为homework_book
在setting里进行基础配置
DATABASES={'default':{'ENGINE' : 'django.db.backends.mysql', #连接MYSQL数据库
'NAME' : 'bookhomework', #设置连接的库名
'HOST':'127.0.0.1', #设置本地连接方式
'POST':3306, #设置端口号
'USER':'root', #以root用户权限登陆数据库
'PASSWORD':'', #写入sql数据库登陆密码,没有设置不写
'OPTIONS':{ #设置严格模式
'init_command':'set sql_mode="STRICT_TRANS_TABLES"',
}
}
}
(严格模式的设置:当传入一个字符串大于设置本身最大长度字符串时,就会报错,这样不会传入一个截取不了全部的字符)
STATIC_URL= '/static/' #别名设置 ,别名的设置让html文件直接引入改路径,即使别名名称更改,也不要紧
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'statics')
]
在与settings.py文件同级目录下的__init__文件中设置
importpymysql
pymysql.install_as_MySQLdb()
在models.py文件中写入数据,是给数据库中的表格添加数据类型:
from django.db import models #引入models模块
#Create your models here.
classBook(models.Model):
name=models.CharField(max_length=32)#设置名字,类型为字符串类型,最大长度为32个字符
price=models.FloatField()#设置价格,类型为浮点型
date=models.DateField() #设置时间
publisher=models.CharField(max_length=32)#设置出版社名称,名字最大长度为32个字节
运行manage.py,输入命令,进行数据库表格数据的同步:
makemigrations
migrate
以上两行代码执行成功后,在python中的databases中连接数据库,即可看到连接的库中创建的表格,再在数据库中添加数据就行
在项目文件夹下创建一个statics文件夹,该文件负责存储静态文件,将下载好的bootstrap文件和jquery-3.4.1文件传入其中,为之后的html文件引用用
在templates文件中创建一个show_books.html文件:
{% load static %}#引入静态文件
Title查看书籍
编号书籍名称价格出版日期出版社操作
{% for books_obj in all_books_objs %}#使用for循环来让数据库中的各行数据逐个调价到表格中{{ forloop.counter }}{{ books_obj.name }}{{ books_obj.price }}{{ books_obj.date|date:'Y-m-d' }}#这个时间格式设置是将原本的date格式转换为普通用户也能看懂的格式
{{ books_obj.publisher }} 编辑{# 删除#}#(两种方法实a标签的跳转,一个是固定格式路径的,一个是引入静态文件的)
{% endfor %}View Code
在urls和views里的配置
urls:from app01 importviews
urlpatterns=[
url(r'^show_books/', views.show_books,name='show_books'),
views:from django.shortcuts importrender,HttpResponse,redirectfrom app01 importmodelsdefshow_books(request):if request.method=='GET':
all_book_objs=models.Book.objects.all()#引入数据库中所有数据的对象
return render(request,'show_books.html',
{'all_books_objs':all_book_objs})#将对象写入到html文件中去
效果图:
此时我们需要做的是点击按钮,做出相应的点击事件,首先配置添加书籍按钮
点击添加书籍按钮的流程步骤:
1.点击添加按钮,跳转到添加书籍信息的网址中
2.写入相关的要添加的书籍的信息
3.点击提交按钮,将添加的信息写入到数据库中
4.再次跳转到查看书籍的网页当中去
5.此时查看书籍调取的是数据库表格中的所有信息,就会将所有的信息展示出来,包括新创建的书籍信息
首先给查看书籍网页中的添加按钮添加一个a标签,让他点击就自动跳转到添加书籍的网页中去
#href里的大括号里的内容代表的是动态引入url网页的意思,add_book网页放的是同级目录下,所以可以直接写文件名,如果想要动态引入的话,在urls.py配置里面也必须添加上相关的路径名称
跳转到add_book网页中,进行相关的网页添加书籍信息配置:
{% load static %}#别名的引入
Title#这个是引入bootstrap文件,利用别名的路径设置
添加书籍
#创建一个表单格式,提交的按钮请求方式为post方法,提交后路径跳转名称还是为'add_book'
{% csrf_token %}书籍名称
书籍价格
出版日期
出版社
Submit
#写入一个button提交按钮
#同样引入bootstrap的js文件
View Code
在urls和views里的配置
urls:from app01 importviews
url(r'^add_book/', views.add_book,name='add_book'),
views:defadd_book(request):if request.method=='GET':return render(request,'add_book.html')
效果图
设置add_book里的点击按钮事件点击之后就将写入的信息保存到数据库中,设置按钮点击的请求方式为post请求方式,添加views函数的数据
from app01 importmodelsdefadd_book(request):if request.method=='GET':return render(request,'add_book.html')else:#此时的否则就是当为post请求提交时,做出以下操作
print(request.POST)#将html文件表单里的内容逐个提取出来,并进行赋值
#name=request.POST.get('name')
#price=request.POST.get('price')
#date=request.POST.get('date')
#publisher=request.POST.get('publisher')
#第二种方法,获得html表单里的内容,并将以字典的格式展现
book_info_dict=request.POST.dict()print(book_info_dict)#将字典中多余的键值对删除掉
del book_info_dict['csrfmiddlewaretoken']#进行数据库的数据创建,以字典的打散形式进行传输数据,同样实现功能
models.Book.objects.create(**book_info_dict)#数据库进行创建新的数据
#models.Book.objects.create(
#name=name,
#price=price,
#date=date,
#publisher=publisher
#)
#进行页面跳转
return redirect('show_books')
(最后一步进行网页跳转到show_books网页中,也可以使用return render方式的方法进行,但是如果只传入一个网页,那么里面的每行数据不会体现出来,只会出现一个标题栏,因为并没有将数据库中的全部数据全部提取出来,并进行写入html网页的这步操作,所以才会这样,所以还要加上这一步;
综上所述,直接使用redirect跳转方式可以直接找到数据,建议使用redirect方法)
在show_books网页中设置删除按钮和编辑按钮点击事件
给show_books里的删除按钮增加a标签的跳转功能
删除#跳转的数据为del_book/后面是点击的删除的按钮的id号
urls和views里的配置:urls:
url(r'^del_book/(\d+)', views.del_book,name='del_book'),#此时在这里配置加上数字的正则匹配符,就是获得第几行点击的删除按钮,回来执行函数时,可以直接找到该行数据并进行删除
views:defdel_book(request,n):#n参数代表的时传入的是第几行数据
models.Book.objects.filter(pk=n).delete()#数据库找到关于第几行的数据,并进行删除
return redirect('show_books')
编辑按钮点击事件的内容编辑:
首先在show_books按钮的编辑按钮增加跳转内容
编写一个edit_book.html文件
{% load static %}
Title修改书籍
书籍名称
#设置表格里的内容生成为本行的原来内容
书籍价格
出版日期
出版社
Submit
View Code
在urls和views里的配置:
urls:
url(r'^edit_book/(\d+)', views.edit_book,name='edit_book'),
views:defedit_book(request,n):if request.method=='GET':
res=models.Book.objects.get(pk=n)return render(request,'edit_book.html' ,{'res':res})else:
book_info_dict=request.POST.dict()print(book_info_dict)del book_info_dict['csrfmiddlewaretoken']
models.Book.objects.filter(pk=n).update(**book_info_dict)return redirect('show_books')#如果为get模式请求,则自动推送edit_book.html文件,如果为post请求,则将表单里的内容数据提取出来,找到数据库对应的行数据进行替换,替换完成后进行跳转到show_books网页中去
整体流程图: