Python学习 Day 059 - Django - 数据表的增删改操作

主要内容:

  • 单表的创建,增,删,改,查
  • 一对多表的创建,增,删,改,查

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
# 展示出版社
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),
#增加出版社
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),
#删除出版社
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),
#编辑出版社
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),
#展示书籍列表
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),
#增加书籍
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),
#删除书籍
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)
#编辑书籍
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})
编辑书籍

 

posted @ 2018-11-28 21:20  一路向北_听风  阅读(233)  评论(0编辑  收藏  举报