zoukankan      html  css  js  c++  java
  • Python学习 Day 059

    主要内容:

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

    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})
    编辑书籍
  • 相关阅读:
    从业十余年谈谈对dotnet看法与坚持
    monodroid 调用 JNI Native 的一些问题
    application数据库连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSource报错
    IDEA创建Spring Boot项目无法连接http://start.spring.io 解决方法
    mysql安装和sqlyog,mysql缺少依赖
    idea配置本地maven
    idea2020v1.3设置中文
    java安装及javac报错解决方法
    微信小程序数组里的值修改,for循环修改数组内容
    微信小程序如何获取屏幕高度和宽度
  • 原文地址:https://www.cnblogs.com/wcx666/p/10034736.html
Copyright © 2011-2022 走看看