主要内容:
- 单表的创建,增,删,改,查
- 一对多表的创建,增,删,改,查
1.单表的创建,增,删,改,查
1.1 单表的创建
(1)Django的配置
#1.Django项目的创建(通过pycharm创建) #2. Django settings文件的配置 #静态文件的配置 STATIC_URL ='/static/' #别名 SATTICFILES_DIRS =[ os.path.join(BASE_DIR,'static') ] #数据库的配置 (可后续进行)# 注释CSRF的中间件(可以提交POST请求) # TEMPLATES 模板文件 DIRS [os.path.join(BASE_DIR,'templates')] #INSTALLED_APPS =[ 'app01' 或者'app01.apps.App01config' ]
(2) 使用mysql数据库
#创建一个mysql数据库 #在settings文件中进行配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bookmanager', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '', } }
#在与settings文件 同级的__init__文件中写入 import mysql pymysql.install_as_MySQLdb()
#在 app下的models 写类 class Publisher(models.Model): # app01_publisher pid = models.AutoField(primary_key=True) # pid 主键 name = models.CharField(max_length=32, unique=True) # 出版社名varcahr(32)
#执行数据库迁移的命令 python manage.py makemigrations # 记录models的变更记录 python manage.py migrate # 把变更记录同步到数据库中
1.2 单表的展示(展示出版社)
# from app01 import views
#在 urls文件中 添加 urlpatterns = [ url(r'^admin/', admin.site.urls), # 展示出版社 url(r'^publisher_list/',views.publisher_list),
#在app 文件的views 引入modles 文件 from app 01 import modles
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
# 展示出版社 def publisher_list(request): # 从数据库获取所有出版社对象 all_publisher = models.Publisher.objects.all().order_by('pid') return render(request, 'publisher_list.html', {'pubs': all_publisher})
1.2 单表的增加(增加出版社)
#在 urls文件中 添加#增加出版社 url(r'^add_publisher/',views.add_publisher),
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#增加出版社 def add_publisher(request): #定义err_msg,new_name err_msg , new_name ='','' #区分请求方式 if request.method =='POST': new_name = request.POST.get('new_name') obj_list = models.Publisher.objects.filter(name=new_name) #接下来要判断是否为空 if not new_name: err_msg = "添加的数据不能为空" #提交的数据在数据库中存在 elif obj_list: err_msg = "添加的数据已经存在" #提交的数据不存在而且不为空 else : #向数据库中添加数据 add_record = models.Publisher.objects.create(name=new_name) #跳转到展示页面 return redirect('/publisher_list/') #返回一个提交数据的页面 return render(request,'add_publisher.html',{'err_msg':err_msg,'err_name':new_name})
1.3 单表的删除(删除出版社)
#在 urls文件中 添加 #删除出版社 url(r'^del_publisher/',views.del_publisher),
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#删除出版社 def del_publisher(request): #获取要删除的数据id pk = request.GET.get('pk') #根据id在数据库中查询记录 record = models.Publisher.objects.filter(pk=pk) # 当数据不存时候 if not record: return HttpResponse('要删除的数据记录不存在') # 从数据库中删除数据 models.Publisher.objects.get(pk=pk).delete() #返回展示页面 return redirect('/publisher_list/')
1.3 单表的编辑(编辑出版社)
#编辑出版社 url(r'^edit_publisher/',views.edit_publisher),
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#编辑出版社 def edit_publisher(request): #定义错误的提示 err_msg = '' #获取要编辑的对象的ID pk = request.GET.get('pk') #从数据库中查询该条记录 record = models.Publisher.objects.filter(pk= pk) #当数据记录不存在 if not record: return HttpResponse('要编辑的数据记录不存在') else: obj = record[0] if request.method =='POST': #获取编辑后的新名字 new_name = request.POST.get('new_name') #在数据库中查找对应名字的记录 exist_record = models.Publisher.objects.filter(name=new_name) #当编辑后的名字为空 if not new_name: err_msg ="编辑后数据记录不能为空" # 当数据库中存在这条记录 elif exist_record: err_msg = "该条数据记录已经存在" # 不存在数据记录,在数据库中提交 else: #修改数据记录 obj.name =new_name #向数据库提交 obj.save() #返回到展示页面 return redirect('/publisher_list/') return render(request,'edit_publisher.html',{'obj':obj,'err_msg':err_msg})
2.一对多表的创建,增,删,改,查
创建一张书籍的表,关联出版社,将出版社设置外键
1.1表的创建
#在modles文件下 class Book(models.Model): title = models.CharField(max_length=32,unique=True) #书籍名称 publisher = models.ForeignKey('Publisher',on_delete=models.CASCADE) #关联出版社
#执行数据库迁移的命令 python manage.py makemigrations # 记录models的变更记录 python manage.py migrate # 把变更记录同步到数据库中()'
1.2 表的展示(展示书籍以及出版社)
#在 urls文件中 添加 # 展示书籍 url(r'^book_list/',views.book_list),
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#展示书籍列表 def book_list(request): #获取所有书籍对象 all_books = models.Book.objects.all() #返回展示书籍的;列表 return render(request,'book_list.html',{'all_books':all_books})
1.2 书籍的添加
#在 urls文件中 添加 #添加书籍 url(r'^add_book/',views.add_book),
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#增加书籍 def add_book(request): #定义err_msg ,err_name err_msg,new_name= '','' #判断请求方式 if request.method =='POST': #获取提交数据 new_name = request.POST.get('new_name') publisher_id = request.POST.get('publisher_id') #查询书籍名称是否在数据库中存在 #仅考虑一本书只能由一个出版社出版 obj_list = models.Book.objects.filter(title=new_name) #判断提交的数据是否为空 if not new_name or not publisher_id: err_msg = '书名或者出版社不能为空' elif obj_list: err_msg ='书籍信息在数据库中已经存在,无需提交' else: #向数据库中插入数据 models.Book.objects.create(title=new_name,publisher_id=publisher_id) #跳转到展示页面 return redirect('/book_list/') # 获取所有出版社的信息 all_publisher =models.Publisher.objects.all() return render(request,'add_book.html',{'all_publisher':all_publisher,'err_msg':err_msg})
1.3 书籍的删除
#在 urls文件中 添加 #删除书籍 url(r'^del_book/',views.del_book),
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#删除书籍 def del_book(request): # 获取要提交的数据 的pk pk =request.GET.get('pk') #根据id在 数据库中查询记录 record = models.Book.objects.filter(pk=pk) #当要删除的记录不存在时候 if not record: return HttpResponse('要删除的数据记录不存在') #从数据库中删除记录 models.Book.objects.get(pk=pk).delete() #跳转到展示页面 return redirect('/book_list/')
1.3 书籍的编辑
#在 urls文件中 添加 #编辑书籍 url(r'^edit_book/',views.edit_book)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#编辑书籍 def edit_book(request): #定义错误提示 err_msg ='' #获取要编辑对象的ID pk =request.GET.get('pk') #从数据库中查询这条ID record = models.Book.objects.filter(pk = pk) #当数据记录不存在时 if not record: return HttpResponse("要编辑的书籍记录不存在") else: obj = record[0] if request.method =='POST': #获取提交的数据 new_name = request.POST.get('new_name') publisher_id = request.POST.get('publisher_id') #在数据库中查找对应名字的记录 exist_record = models.Book.objects.filter(title=new_name) #当编辑后的名字为空 if not new_name or not publisher_id: err_msg = '编辑后的书名和出版社不能为空' elif exist_record: err_msg = '编辑后的书名信息已经存在' #当编辑后的书名不存在,可以提交数据库更改 else: #修改数据 obj.title = new_name obj.publisher_id = publisher_id #保存到数据库表中 obj.save() return redirect('/book_list/') #查询出所有出版社的对象 all_publisher = models.Publisher.objects.all() return render(request,'edit_book.html',{'obj':obj,'all_publisher':all_publisher,'err_msg':err_msg})