zoukankan      html  css  js  c++  java
  • Python

    在 app01/models.py 中添加 Book 类对象表

    from django.db import models
    
    # Create your models here.
    
    
    # 出版社
    class Publisher(models.Model):
        id = models.AutoField(primary_key=True)  # 自增的 ID 主键
        # 创建一个 varchar(64) 的唯一的不为空的字段
        name = models.CharField(max_length=64, null=False, unique=True)
    
    
    # 书籍
    class Book(models.Model):
        id = models.AutoField(primary_key=True)  # 自增的 ID 主键
        # 创建一个 varchar(64) 的唯一的不为空的字段
        title = models.CharField(max_length=64, null=False, unique=True)
        # 和出版社关联的外键字段
        publisher = models.ForeignKey(to="Publisher")
    

    然后执行命令更新到数据库中

    manage.py@mysite0 > makemigrations
    manage.py@mysite0 > migrate
    

    在 Book 表中添加 3 条数据

    展示书籍列表:

    创建 book_list.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍列表</title>
    </head>
    <body>
    
    <table border="1">
        <thead>
        <tr>
            <th>id</th>
            <th>书名</th>
            <th>出版社</th>
        </tr>
        </thead>
        <tbody>
        {% for book in book_list %}
            <tr>
            <td>{{ book.id }}</td>
            <td>{{ book.title }}</td>
            <td>{{ book.publisher.name }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    </body>
    </html>
    

    这里的 book.publisher 获取到的是 Publisher 对象,因为 publisher 关联了 Publisher 对象

    在 app01/views.py 中添加 book_list 函数

    from django.shortcuts import render, redirect, HttpResponse
    from app01 import models
    
    
    # 展示出版社列表
    def publisher_list(request):
        # 去数据库查出所有的出版社,填充到 html 中,返回给用户
        ret = models.Publisher.objects.all().order_by("id")  # order_by("id") 通过 id 进行排序
        return render(request, "publisher_list.html", {"publisher_list": ret})
    
    
    # 添加新的出版社
    def add_publisher(request):
        # 如果是 POST 请求,就获取用户填写的数据
        if request.method == "POST":
            new_publisher = request.POST.get("publisher_name")
            # 获得数据后去数据库中新增一条数据
            models.Publisher.objects.create(name=new_publisher)
            # 添加成功后进行跳转
            return redirect("/publisher_list/")
    
        # 用户来到该界面返回的 html 页面
        return render(request, "add_publisher.html")
    
    
    # 删除出版社
    def del_publisher(request):
        # 从 GET 请求的参数中拿到要删除的 id 值
        del_id = request.GET.get('id')
        # 如果取到 id 值,就去数据库中删除该 id 的数据
        if del_id:
            # 根据 id 查找数据,并删除
            del_obj = models.Publisher.objects.get(id=del_id).delete()
            # 删除后返回页面
            return redirect("/publisher_list/")
        else:
            return HttpResponse("要删除的数据不存在!")
    
    
    # 编辑出版社
    def edit_publisher(request):
        # 获取 POST 发来的数据,并更新到数据库中
        if request.method == "POST":
            # 获取 POST 传送来的 id 值和出版社
            edit_id = request.POST.get('id')
            new_name = request.POST.get('publisher_name')
            # 根据 id 取得出版社
            publisher = models.Publisher.objects.get(id=edit_id)
            publisher.name = new_name
            publisher.save()  # 把修改的结果提交到数据库
            return redirect("/publisher_list/")  # 跳转到列表页面
    
        # 从 GET 请求中取得 id 值
        publisher_id = request.GET.get('id')
        if publisher_id:
            # 获取当前编辑的出版社对象
            publisher_obj = models.Publisher.objects.get(id=publisher_id)
            return render(request, "edit_publisher.html", {"publisher": publisher_obj})
        else:
            return HttpResponse("编辑的出版社不存在!")
    
    
    # 展示书籍列表
    def book_list(request):
        # 去数据库中查询所有书籍
        all_book = models.Book.objects.all()
        # 渲染数据
        return render(request, "book_list.html", {"book_list": all_book})
    

    在 mysite0/urls.py 中添加对应关系

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^publisher_list/', views.publisher_list),
        url(r'^add_publisher/', views.add_publisher),
        url(r'^del_publisher/', views.del_publisher),
        url(r'^edit_publisher/', views.edit_publisher),
        url(r'^book_list/', views.book_list),
    ]
    

    运行结果:

    添加书籍:

    修改 book_list.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍列表</title>
    </head>
    <body>
    
    <table border="1">
        <thead>
        <tr>
            <th>id</th>
            <th>书名</th>
            <th>出版社</th>
        </tr>
        </thead>
        <tbody>
        {% for book in book_list %}
            <tr>
            <td>{{ book.id }}</td>
            <td>{{ book.title }}</td>
            <td>{{ book.publisher.name }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    
    <a href="/add_book/">添加书籍</a>
    
    </body>
    </html>
    

    创建 add_book.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加书籍</title>
    </head>
    <body>
    
    <h1>添加书籍</h1>
    
    <form action="/add_book/" method="post">
        <p>
            书名:<input type="text" name="book_title">
        </p>
        <p>
            出版社:
            <select name="publisher" >
                {% for publisher in publisher_list %}
                    <option value="{{ publisher.id }}">{{ publisher.name }}</option>
                {% endfor %}
            </select>
        </p>
        <p>
             <input type="submit" value="提交">
        </p>
    
    </form>
    
    </body>
    </html>
    

    在 app01/views.py 中添加 add_book 函数

    from django.shortcuts import render, redirect, HttpResponse
    from app01 import models
    
    
    # 展示出版社列表
    def publisher_list(request):
        # 去数据库查出所有的出版社,填充到 html 中,返回给用户
        ret = models.Publisher.objects.all().order_by("id")  # order_by("id") 通过 id 进行排序
        return render(request, "publisher_list.html", {"publisher_list": ret})
    
    
    # 添加新的出版社
    def add_publisher(request):
        # 如果是 POST 请求,就获取用户填写的数据
        if request.method == "POST":
            new_publisher = request.POST.get("publisher_name")
            # 获得数据后去数据库中新增一条数据
            models.Publisher.objects.create(name=new_publisher)
            # 添加成功后进行跳转
            return redirect("/publisher_list/")
    
        # 用户来到该界面返回的 html 页面
        return render(request, "add_publisher.html")
    
    
    # 删除出版社
    def del_publisher(request):
        # 从 GET 请求的参数中拿到要删除的 id 值
        del_id = request.GET.get('id')
        # 如果取到 id 值,就去数据库中删除该 id 的数据
        if del_id:
            # 根据 id 查找数据,并删除
            del_obj = models.Publisher.objects.get(id=del_id).delete()
            # 删除后返回页面
            return redirect("/publisher_list/")
        else:
            return HttpResponse("要删除的数据不存在!")
    
    
    # 编辑出版社
    def edit_publisher(request):
        # 获取 POST 发来的数据,并更新到数据库中
        if request.method == "POST":
            # 获取 POST 传送来的 id 值和出版社
            edit_id = request.POST.get('id')
            new_name = request.POST.get('publisher_name')
            # 根据 id 取得出版社
            publisher = models.Publisher.objects.get(id=edit_id)
            publisher.name = new_name
            publisher.save()  # 把修改的结果提交到数据库
            return redirect("/publisher_list/")  # 跳转到列表页面
    
        # 从 GET 请求中取得 id 值
        publisher_id = request.GET.get('id')
        if publisher_id:
            # 获取当前编辑的出版社对象
            publisher_obj = models.Publisher.objects.get(id=publisher_id)
            return render(request, "edit_publisher.html", {"publisher": publisher_obj})
        else:
            return HttpResponse("编辑的出版社不存在!")
    
    
    # 展示书籍列表
    def book_list(request):
        # 去数据库中查询所有书籍
        all_book = models.Book.objects.all()
        print(all_book)
        # 渲染数据
        return render(request, "book_list.html", {"book_list": all_book})
    
    
    # 添加书籍
    def add_book(request):
        if request.method == "POST":
            new_title = request.POST.get("book_title")
            new_publisher_id = request.POST.get("publisher")
            # 去数据库中创建数据
            models.Book.objects.create(title=new_title, publisher_id=new_publisher_id)
            return redirect("/book_list/")
        # 去数据库取得出版社数据展示在页面上以供用户选择
        publishers = models.Publisher.objects.all()
        return render(request, "add_book.html", {"publisher_list": publishers})
    

    在 mysite0/urls.py 中添加对应关系

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publisher_list/', views.publisher_list),
        url(r'^add_publisher/', views.add_publisher),
        url(r'^del_publisher/', views.del_publisher),
        url(r'^edit_publisher/', views.edit_publisher),
        url(r'^book_list/', views.book_list),
        url(r'^add_book/', views.add_book),
    ]
    

    运行结果:

    点击“添加书籍”

    点击“提交”

    删除书籍:

    修改 book_list.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍列表</title>
    </head>
    <body>
    
    <table border="1">
        <thead>
        <tr>
            <th>id</th>
            <th>书名</th>
            <th>出版社</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for book in book_list %}
            <tr>
            <td>{{ book.id }}</td>
            <td>{{ book.title }}</td>
            <td>{{ book.publisher.name }}</td>
            <td>
                <a href="/del_book/?id={{ book.id }}">删除</a>
            </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    
    <a href="/add_book/">添加书籍</a>
    
    </body>
    </html>
    

    在 app01/views.py 中添加 del_book 函数

    from django.shortcuts import render, redirect, HttpResponse
    from app01 import models
    
    
    # 展示出版社列表
    def publisher_list(request):
        # 去数据库查出所有的出版社,填充到 html 中,返回给用户
        ret = models.Publisher.objects.all().order_by("id")  # order_by("id") 通过 id 进行排序
        return render(request, "publisher_list.html", {"publisher_list": ret})
    
    
    # 添加新的出版社
    def add_publisher(request):
        # 如果是 POST 请求,就获取用户填写的数据
        if request.method == "POST":
            new_publisher = request.POST.get("publisher_name")
            # 获得数据后去数据库中新增一条数据
            models.Publisher.objects.create(name=new_publisher)
            # 添加成功后进行跳转
            return redirect("/publisher_list/")
    
        # 用户来到该界面返回的 html 页面
        return render(request, "add_publisher.html")
    
    
    # 删除出版社
    def del_publisher(request):
        # 从 GET 请求的参数中拿到要删除的 id 值
        del_id = request.GET.get('id')
        # 如果取到 id 值,就去数据库中删除该 id 的数据
        if del_id:
            # 根据 id 查找数据,并删除
            del_obj = models.Publisher.objects.get(id=del_id).delete()
            # 删除后返回页面
            return redirect("/publisher_list/")
        else:
            return HttpResponse("要删除的数据不存在!")
    
    
    # 编辑出版社
    def edit_publisher(request):
        # 获取 POST 发来的数据,并更新到数据库中
        if request.method == "POST":
            # 获取 POST 传送来的 id 值和出版社
            edit_id = request.POST.get('id')
            new_name = request.POST.get('publisher_name')
            # 根据 id 取得出版社
            publisher = models.Publisher.objects.get(id=edit_id)
            publisher.name = new_name
            publisher.save()  # 把修改的结果提交到数据库
            return redirect("/publisher_list/")  # 跳转到列表页面
    
        # 从 GET 请求中取得 id 值
        publisher_id = request.GET.get('id')
        if publisher_id:
            # 获取当前编辑的出版社对象
            publisher_obj = models.Publisher.objects.get(id=publisher_id)
            return render(request, "edit_publisher.html", {"publisher": publisher_obj})
        else:
            return HttpResponse("编辑的出版社不存在!")
    
    
    # 展示书籍列表
    def book_list(request):
        # 去数据库中查询所有书籍
        all_book = models.Book.objects.all()
        print(all_book)
        # 渲染数据
        return render(request, "book_list.html", {"book_list": all_book})
    
    
    # 添加书籍
    def add_book(request):
        if request.method == "POST":
            new_title = request.POST.get("book_title")
            new_publisher_id = request.POST.get("publisher")
            # 去数据库中创建数据
            models.Book.objects.create(title=new_title, publisher_id=new_publisher_id)
            return redirect("/book_list/")
        # 去数据库取得出版社数据展示在页面上以供用户选择
        publishers = models.Publisher.objects.all()
        return render(request, "add_book.html", {"publisher_list": publishers})
    
    
    # 删除书籍
    def del_book(request):
        # 从 URL 中获取要删除的书籍的 id
        del_id = request.GET.get("id")
        # 去数据库中删除指定 id 的书籍
        models.Book.objects.get(id=del_id).delete()
        # 跳转到书籍列表页面
        return redirect("/book_list/")
    

    在 mysite0/urls.py 中添加对应关系

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publisher_list/', views.publisher_list),
        url(r'^add_publisher/', views.add_publisher),
        url(r'^del_publisher/', views.del_publisher),
        url(r'^edit_publisher/', views.edit_publisher),
        url(r'^book_list/', views.book_list),
        url(r'^add_book/', views.add_book),
        url(r'^del_book/', views.del_book),
    ]
    

    运行结果:

    删除“PHP”

    页面闪了一下,PHP 就被删除了

    编辑书籍:

    修改 book_list.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍列表</title>
    </head>
    <body>
    
    <table border="1">
        <thead>
        <tr>
            <th>id</th>
            <th>书名</th>
            <th>出版社</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for book in book_list %}
            <tr>
            <td>{{ book.id }}</td>
            <td>{{ book.title }}</td>
            <td>{{ book.publisher.name }}</td>
            <td>
                <a href="/del_book/?id={{ book.id }}">删除</a>
                <a href="/edit_book/?id={{ book.id }}">编辑</a>
            </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    
    <a href="/add_book/">添加书籍</a>
    
    </body>
    </html>
    

    创建 edit_book.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>编辑书籍</title>
    </head>
    <body>
    
    <h1>编辑书籍</h1>
    
    <form action="/edit_book/" method="post">
        <input type="text" style="display: none" name="id" value="{{ book_obj.id }}">
        <p>
            书名:
            <input type="text" name="book_title" value="{{ book_obj.title }}">
        </p>
        <p>
            出版社:
            <select name="publisher">
                {% for publisher in publisher_list %}
                    {# 通过 if 条件判断来选择默认出版社 #}
                    {% if book_obj.publisher_id == publisher.id %}
                        {#  默认选择当前书籍关联的出版社 #}
                        <option selected value="{{ publisher.id }}">{{ publisher.name }}</option>
                    {% else %}
                        {# 其他的出版社不选中 #}
                        <option value="{{ publisher.id }}">{{ publisher.name }}</option>
                    {% endif %}
                {% endfor %}
            </select>
        </p>
        <p>
            <input type="submit" value="提交">
        </p>
    </form>
    
    </body>
    </html>
    

    在 app01/views.py 中添加 edit_book 函数

    from django.shortcuts import render, redirect, HttpResponse
    from app01 import models
    
    
    # 展示出版社列表
    def publisher_list(request):
        # 去数据库查出所有的出版社,填充到 html 中,返回给用户
        ret = models.Publisher.objects.all().order_by("id")  # order_by("id") 通过 id 进行排序
        return render(request, "publisher_list.html", {"publisher_list": ret})
    
    
    # 添加新的出版社
    def add_publisher(request):
        # 如果是 POST 请求,就获取用户填写的数据
        if request.method == "POST":
            new_publisher = request.POST.get("publisher_name")
            # 获得数据后去数据库中新增一条数据
            models.Publisher.objects.create(name=new_publisher)
            # 添加成功后进行跳转
            return redirect("/publisher_list/")
    
        # 用户来到该界面返回的 html 页面
        return render(request, "add_publisher.html")
    
    
    # 删除出版社
    def del_publisher(request):
        # 从 GET 请求的参数中拿到要删除的 id 值
        del_id = request.GET.get('id')
        # 如果取到 id 值,就去数据库中删除该 id 的数据
        if del_id:
            # 根据 id 查找数据,并删除
            del_obj = models.Publisher.objects.get(id=del_id).delete()
            # 删除后返回页面
            return redirect("/publisher_list/")
        else:
            return HttpResponse("要删除的数据不存在!")
    
    
    # 编辑出版社
    def edit_publisher(request):
        # 获取 POST 发来的数据,并更新到数据库中
        if request.method == "POST":
            # 获取 POST 传送来的 id 值和出版社
            edit_id = request.POST.get('id')
            new_name = request.POST.get('publisher_name')
            # 根据 id 取得出版社
            publisher = models.Publisher.objects.get(id=edit_id)
            publisher.name = new_name
            publisher.save()  # 把修改的结果提交到数据库
            return redirect("/publisher_list/")  # 跳转到列表页面
    
        # 从 GET 请求中取得 id 值
        publisher_id = request.GET.get('id')
        if publisher_id:
            # 获取当前编辑的出版社对象
            publisher_obj = models.Publisher.objects.get(id=publisher_id)
            return render(request, "edit_publisher.html", {"publisher": publisher_obj})
        else:
            return HttpResponse("编辑的出版社不存在!")
    
    
    # 展示书籍列表
    def book_list(request):
        # 去数据库中查询所有书籍
        all_book = models.Book.objects.all()
        print(all_book)
        # 渲染数据
        return render(request, "book_list.html", {"book_list": all_book})
    
    
    # 添加书籍
    def add_book(request):
        if request.method == "POST":
            new_title = request.POST.get("book_title")
            new_publisher_id = request.POST.get("publisher")
            # 去数据库中创建数据
            models.Book.objects.create(title=new_title, publisher_id=new_publisher_id)
            return redirect("/book_list/")
        # 去数据库取得出版社数据展示在页面上以供用户选择
        publishers = models.Publisher.objects.all()
        return render(request, "add_book.html", {"publisher_list": publishers})
    
    
    # 删除书籍
    def del_book(request):
        # 从 URL 中获取要删除的书籍的 id
        del_id = request.GET.get("id")
        # 去数据库中删除指定 id 的书籍
        models.Book.objects.get(id=del_id).delete()
        # 跳转到书籍列表页面
        return redirect("/book_list/")
    
    
    # 编辑书籍
    def edit_book(request):
        # 从 POST 数据中提取书籍 id 和书籍名及出版社
        if request.method == "POST":
            edit_id = request.POST.get("id")
            new_title = request.POST.get("book_title")
            new_publisher_id = request.POST.get("publisher")
            # 更新数据
            edit_book_obj = models.Book.objects.get(id=edit_id)
            edit_book_obj.title = new_title
            edit_book_obj.publisher_id = new_publisher_id
            # 将更新的数据提交到数据库中
            edit_book_obj.save()
            # 跳转到书籍列表页面
            return redirect("/book_list/")
    
        # 取得编辑书籍的 id
        book_id = request.GET.get("id")
        # 根据 id 去数据库中取得书籍数据
        book_obj = models.Book.objects.get(id=book_id)
        publisher_obj = models.Publisher.objects.all()
        return render(request, "edit_book.html", {"publisher_list": publisher_obj, "book_obj": book_obj})
    

    在 mysite0/urls.py 中添加对应关系

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publisher_list/', views.publisher_list),
        url(r'^add_publisher/', views.add_publisher),
        url(r'^del_publisher/', views.del_publisher),
        url(r'^edit_publisher/', views.edit_publisher),
        url(r'^book_list/', views.book_list),
        url(r'^add_book/', views.add_book),
        url(r'^del_book/', views.del_book),
        url(r'edit_book/', views.edit_book),
    ]
    

    运行结果:

    编辑“《C++》”

    改成“《C》”,“乙出版社”

  • 相关阅读:
    电信的星空极速客户端软件强制安装策略升级了
    CSS 控件适配器工具包对事件处理的 Bug 以及修正办法
    IronPython 源码剖析系列(1):IronPython 编译器
    对 CSS 控件适配器处理事件的 Bug 进一步修正
    明天去长春出差。。。
    Windows 系统右键菜单假死问题解决一例
    使用 Anthem.NET 的常见回调(Callback)处理方式小结
    TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
    ASP.NET Web开发框架之六 数据库文档方法,工具和实践
    推荐功能强大的ORM Profiler,ORM问题追踪的利器
  • 原文地址:https://www.cnblogs.com/sch01ar/p/10771707.html
Copyright © 2011-2022 走看看