• 第二篇-Django建立数据库各表之间的联系(中)


    上篇中已经建立了两个table,Book和Publish。这篇介绍如何用python增删改查数据库中的数据。

    在views.py中创建一个index函数

    from django.shortcuts import render
    
    # Create your views here.
    from app01.models import *
    
    def index(request):
        return render(request,"index.html")
    

     返回一个index.html页面。urls.py中也要加入相应的函数。

    from django.contrib import admin
    from django.urls import path
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.index),
    ]
    

     写一个index.html页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .head{
                line-height: 40px;
                background-color: green;
                color: white;
                text-align: center;
            }
        </style>
    </head>
    <body>
    
    <div class="outer">
        <div class="head">标题</div>
        <h1>一对多</h1>
        <div class="content">
            <a href="/addbook/">添加书籍</a>
            <a href="/update/">修改书籍</a>
            <a href="/delete/">删除书籍</a>
            <a href="/select/">查询书籍</a>
        </div>
        <hr>
        <div class="queryResult">
            {% for book in book_list %}
                <div>
                    <p>{{ book.name }} {{ book.author }} {{ book.price }}</p>
                </div>
            {% endfor %}
        </div>
    </div>
    
    </body>
    </html>
    

     由于html中点击添加书籍,修改书籍,删除书籍以及查询书籍会跳到不同的链接,所以在urls.py里面要添加相应链接

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.index),
        path('addbook/', views.addbook),
        path('update/', views.update),
        path('delete/', views.delete),
        path('select/', views.select),
    ]
    

     同样,在views.py中要添加相应函数,先写一个addbook的函数进行测试。

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    from app01.models import *
    
    def index(request):
        return render(request,"index.html")
    
    def addbook(request):
        Book.objects.create(name="linux运维",price=77,pub_date="2018-11-2",publish_id=2)
        return HttpResponse("添加成功")
    
    def update():pass
    
    def delete():pass
    
    def select():pass
    View Code

    然后可以运行试试,在命令行窗口Terminal中使用命令:

    python manage.py runserver 8888

    然后在浏览器地址栏输入http://127.0.0.1:8888/index/

    得到此页面,由于我们已经在views.py中写了addbook的函数,所以我们可以点击添加书籍,看看有没有把书籍添加进去。会跳进addbook界面。

    我们现在在去数据库中查看,会发现已经添加了一行信息进去

    id那一栏是自动按照自增一的顺序添加的,由于第一次添加数据时,由于没有建立publish表,导致外键不能添加报错。所以id=1已经被使用了,后来建立的id是从2开始的。可以看到linux运维这一栏已经被添加成功了。

    注意,之前添加外键那一栏的时候是直接用 publish_id添加的,如果想用publish添加的话,需要用对象添加进去。

    def addbook(request):
        # Book.objects.create(name="linux运维",price=77,pub_date="2018-11-2",publish_id=2)
    
        publish_obj=Publish.objects.filter(name="人民出版社")[0]
        Book.objects.create(name="GO",price=23,pub_date="2018-10-2",publish=publish_obj)
        return HttpResponse("添加成功")
    View Code

    刷新http://127.0.0.1:8888/addbook/,可以看见GO那一栏也被添加进去了。

  • 相关阅读:
    linux中解压.tgz, .tar.gz ,zip ,gz, .tar文件
    hook(v16.7测试)?
    React优点?
    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
    说说数据库连接池工作原理和实现方案?
    short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
    Oracle的数据优化(经常被问到)?
    存储过程和函数的区别?
    Collection 和 Collections的区别?
    说说数据库连接池工作原理和实现方案?
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/9894432.html
Copyright © 2020-2023  润新知