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

  

原文地址:https://www.cnblogs.com/wuchenggong/p/9371905.html