zoukankan      html  css  js  c++  java
  • python全栈开发day62-两表操作增删改查,外键,if else模板语法

    一、今日内容总结:

    day62
    内容回顾:
        1. django有关所有命令:
            pip install django==1.11.14
            django-admin startproject 项目名称
            cd 项目
            python manage.py runserver 80  0.0.0.0:80
            python manage.py startapp app01
            python manage.py makemigrations # 保存models修改记录
            python manage.py migrate   # 操作数据表
            
        2. settings相关:
            1. templates 模板相关  DIRS 
            2. static 静态文件相关  
                STATIC_URL = '/static/'
                STATICFILES_DIRS = [
                    os.path.join(BASE_DIR,'static')
                ]
            3. 注释CSRF中间件  方便你提交POST请求
            4. DATABASES 
                引擎:mysql
                NAME: 数据库名称
                HOST:IP地址
                PORT: 端口号  3306
                USER: 用户名  root
                PASSWORD: 密码 ''  
            5. APP
                INSTALLED_APPS=[
                    'app01''app01.apps.App01Config'
                ]
        3.GET和POST
            GET:
                1.form表单 默认get请求
                2.直接在浏览器输入URL 
                3.a标签
                
                127.0.0.1:8000/add_publisher/?id=1&name=alex
                
                request.GET        大字典
                request.GET.get('id','1')
                request.GET['id']
            POST:
                form表单提交 method='post'
                
                参数不在URL显示,参数在请求体当中
                
                request.POST        大字典
                request.POST.get('id','1')
                request.POST['id']
        4. mysql数据的使用:
            1. 创建mysql数据库
            2. settings.py中要配置
                DATABASES = {
                    'default': {
                        'ENGINE': 'django.db.backends.mysql',
                        'NAME': 'day61',
                        'HOST': '127.0.0.1',
                        'PORT': 3306,
                        'USER': 'root',
                        'PASSWORD': '',
                    }
                }
            3. 告诉django使用pymysql来连接数据库:
                在与项目同名的文件夹下的__init__.py文件中写:
                import pymysql
                pymysql.install_as_MySQLdb()
            4. 在app01/models.py写类(必须继承models.Model)
                class Publisher(models.Model):
                    id = models.AutoField(primary_key=True)
                    name = models.CharField(max_length=32,null=False,unique=True)
                
            5. 执行数据库迁移两条命令
                python manage.py makemigrations # 保存models修改记录
                python manage.py migrate   # 操作数据表
        5. ORM操作:
            1. 查
                models.Publisher.objects.all()  # 查询所有的对象 ——》对象列表 QuerySet
                models.Publisher.objects.get(id='1')  # 查询一个对象  ——》单独的对象
                models.Publisher.objects.filter(id='1') # 查询所有符合条件的对象 ——》对象列表 QuerySet
                models.Publisher.objects.filter(id='1').order_by('id') 
                
            2. 增
                models.Publisher.objects.create(name='xinhuachubanshe')
                
            3. 删
                # 删除一个对象
                obj_list = models.Publisher.objects.filter(id='1')
                obj_list[0].delete()
                # 删除所有符合条件的对象
                models.Publisher.objects.filter(id='1').delete()
                
            4. 改
                obj_list = models.Publisher.objects.filter(id='1')
                obj = obj_list[0]
                obj.name = 'asdasd'
                obj.save()
        6. 模板语法:
            render(request,'HTML文件',{'publishers':obj_list})
            
            {{ 变量 }}
            
            for 循环
            {% for i in publishers %}
                {{ i.name }}
            {% endfor %}
        
    
    今日内容:
        1. 设计图书管理系统的表结构
            书 出版社 作者
            
            书和出版社   多对一  
            书和作者      多对多
            
            
        2. 书的增删改查 
        
        
        3. 外键
            class Book(models.Model):
                id = models.AutoField(primary_key=True)
                title = models.CharField(max_length=32, null=False, unique=True)
                publisher = models.ForeignKey(to='Publisher',on_delete=models.CASCADE)
            
            
            
            books = models.Book.objects.all()
    
            for book in books:
                print(book.publisher_id)        # 数据库中的id
                print(book.publisher)            # 关联的对象
                # print(book.publisher.addr)
                print('=' * 30)
            
            创建外键关联的方式
            
            publisher = 关联的对象
            publisher_obj = models.Publisher.objects.get(id=publisher_id)
            book_obj = models.Book.objects.create(title=title, publisher=publisher_obj)
    
            
            publisher_id = 关联对象的id 
            book_obj = models.Book.objects.create(title=title, publisher_id=publisher_id)
            
            
        4. 模板相关
            {% if edit_book.publisher_id == publish.id %}
                <option value="{{ publish.id }}" selected>{{ publish.name }}</option>
            {% elif 其他条件 %}
                操作
            {% else %}
                <option value="{{ publish.id }}">{{ publish.name }}</option>
            {% endif %}
        
            
            
    课上笔记

    1.if模板语法

      {% if 条件%}

        操作....

      {%elif 条件%}

        操作

      {%endif%}

    2.外键 

      publisher = models.ForeignKey(to='Publisher')
      操作时:
      obj.publisher = 对象
      或
      obj.publisher_id = id

    3.两种改方法不一样

    obj1 = edit_obj_list[0]

    obj2 = edit_obj_list[0]
    两者值一样,但内存地址id不一样
      edit_obj_list[0].name = new_name
      edit_obj_list[0].save()
      obj = edit_obj_list[0]
      obj.name = new_name
      obj.save()
    不一样

    4.其他

        

    二、预习和扩展



    1.str 和 repr
      列表【】中的对象 直接打印列表会调用repr,因为列表时机器,直接打印对象会调用str

      

  • 相关阅读:
    vue点击元素变色兄弟元素不变色
    获取今天昨天本月的时间段
    java.io.InputStream -- 1.8 初识,应用场景待更新
    java.io.FilterInputStream
    java.io.FileInputStream
    java.io.ByteArrayInputStream -- 1.8
    JavaBeans -- 1.8
    mysql 导出和导入数据
    tp5 数据库迁移工具 migrate&seed
    tp5模型一对一关联hasOne
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9371905.html
Copyright © 2011-2022 走看看