1

day64 views文件

from django.shortcuts import HttpResponse, render, redirect
from app01 import models
# Create your views here.


# 展示出版社列表
def publisher_list(request):
    # 去数据库查出所有的出版社,填充到HTML中,给用户返回
    ret = models.Publisher.objects.all().order_by("id")
    return render(request, "publisher_list.html", {"publisher_list": ret})


# 添加新的出版社
def add_publisher(request):
    error_msg = ""
    # 如果是POST请求,我就取到用户填写的数据
    if request.method == "POST":
        new_name = request.POST.get("publisher_name", None)
        if new_name:
            # 通过ORM去数据库里新建一条记录
            models.Publisher.objects.create(name=new_name)
            # 引导用户访问出版社列表页,查看是否添加成功  --> 跳转
            return redirect("/publisher_list/")
        else:
            error_msg = "出版社名字不能为空!"
    # 用户第一次来,我给他返回一个用来填写的HTML页面
    return render(request, "add_publisher.html", {"error": error_msg})


# 删除出版社的函数
def delete_publisher(request):
    print(request.GET)
    print("=" * 120)
    # 删除指定的数据
    # 1. 从GET请求的参数里面拿到将要删除的数据的ID值
    del_id = request.GET.get("id", None)  # 字典取值,娶不到默认为None
    # 如果能取到id值
    if del_id:
        # 去数据库删除当前id值的数据
        # 根据id值查找到数据
        del_obj = models.Publisher.objects.get(id=del_id)
        # 删除
        del_obj.delete()
        # 返回删除后的页面,跳转到出版社的列表页,查看删除是否成功
        return redirect("/publisher_list/")
    else:
        return HttpResponse("要删除的数据不存在!")


# 编辑出版社
def edit_publisher(request):
    # 用户修改完出版社的名字,点击提交按钮,给我发来新的出版社名字
    if request.method == "POST":
        print(request.POST)
        # 取新出版社名字
        edit_id = request.POST.get("id")
        new_name = request.POST.get("publisher_name")
        # 更新出版社
        # 根据id取到编辑的是哪个出版社
        edit_publisher = models.Publisher.objects.get(id=edit_id)
        edit_publisher.name = new_name
        edit_publisher.save()  # 把修改提交到数据库
        # 跳转出版社列表页,查看是否修改成功
        return redirect("/publisher_list/")
    # 从GET请求的URL中取到id参数
    edit_id = request.GET.get("id")
    if edit_id:
        # 获取到当前编辑的出版社对象
        publisher_obj = models.Publisher.objects.get(id=edit_id)
        return render(request, "edit_publisher.html", {"publisher": publisher_obj})
    else:
        return HttpResponse("编辑的出版社不存在!")


# 展示书的列表
def book_list(request):
    # 去数据库中查询所有的书籍
    all_book = models.Book.objects.all()
    # 在HTML页面完成字符串替换(渲染数据)
    return render(request, "book_list.html", {"all_book": all_book})


# 删除书籍
def delete_book(request):
    # 从URL里面获取要删除的书籍的id值
    delete_id = request.GET.get("id")  # 从URL里面取数据
    # 去删除数据库中删除指定id的数据
    models.Book.objects.get(id=delete_id).delete()
    # 返回书籍列表页面, 查看是否删除成功
    return redirect("/book_list/")


# 添加书籍
def add_book(request):
    if request.method == "POST":
        print(request.POST)
        print("=" * 120)
        # {"book_title": "跟金老板学开车", "publisher": 9}
        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)

        # 用出版社对象创建
        # publisher_obj = models.Publisher.objects.get(id=new_publisher_id)
        # models.Book.objects.create(title=new_title, publisher=publisher_obj)

        # 返回到书籍列表页
        return redirect("/book_list/")

    # 取到所有的出版社
    ret = models.Publisher.objects.all()
    return render(request, "add_book.html", {"publisher_list": ret})


# 编辑书籍
def edit_book(request):
    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值
    edit_id = request.GET.get("id")
    # 根据id去数据库中把具体的书籍对象拿到
    edit_book_obj = models.Book.objects.get(id=edit_id)
    print(edit_book_obj.id)
    print(edit_book_obj.title)
    print(edit_book_obj.publisher)  # 取到当前书籍对象关联的出版社对象
    print(edit_book_obj.publisher_id)  # 取到当前书籍对象关联的出版社的id值

    ret = models.Publisher.objects.all()
    return render(
        request,
        "edit_book.html",
        {"publisher_list": ret, "book_obj": edit_book_obj}
    )


# 作者列表
def author_list(request):
    # author_obj = models.Author.objects.get(id=1)
    # print(author_obj.book.all())
    # print("=" * 120)

    # 查询所有的作者
    all_author = models.Author.objects.all()
    return render(request, "author_list.html", {"author_list": all_author})


# 添加作者
def add_author(request):
    if request.method == "POST":
        print("in post...")
        # 取到提交的数据
        new_author_name = request.POST.get("author_name")
        # post提交的数据是多个值的时候一定会要用getlist,如多选的checkbox和多选的select
        books = request.POST.getlist("books")
        # 创建作者
        new_author_obj = models.Author.objects.create(name=new_author_name)
        # 把新作者和书籍建立对应关系,自动提交
        new_author_obj.book.set(books)
        # 跳转到作者列表页面,查看是否添加成功!
        return redirect("/author_list/")

    # 查询所有的书籍
    ret = models.Book.objects.all()
    return render(request, "add_author.html", {"book_list": ret})


# 删除作者
def delete_author(request):
    # 从URL里面取到要删除的作者id
    delete_id = request.GET.get("id")
    #根据ID值取到要删除的作者对象,直接删除
    # 1. 去作者表把作者删了
    # 2. 去作者和书的关联表,把对应的关联记录删除了
    models.Author.objects.get(id=delete_id).delete()
    # 返回作者列表页面
    return redirect("/author_list/")


# 编辑作者
def edit_author(request):

    # 如果编辑完提交数据过来
    if request.method == "POST":
        # 拿到提交过来的编辑后的数据
        edit_author_id = request.POST.get("author_id")
        new_author_name = request.POST.get("author_name")
        # 拿到编辑后作者关联的书籍信息
        new_books = request.POST.getlist("books")
        # 根据ID找到当前编辑的作者对象
        edit_author_obj = models.Author.objects.get(id=edit_author_id)
        # 更新作者的名字
        edit_author_obj.name = new_author_name
        # 更新作者关联的书的对应关系
        edit_author_obj.book.set(new_books)
        # 将修改提交到数据库
        edit_author_obj.save()
        # 返回作者列表页,查看是否编辑成功
        return redirect("/author_list/")

    # 从URL里面取要编辑的作者的id信息
    edit_id = request.GET.get("id")
    # 找到要编辑的作者对象
    edit_author_obj = models.Author.objects.get(id=edit_id)

    # 查询所有的书籍对象
    ret = models.Book.objects.all()
    return render(request, "edit_author.html", {"book_list": ret, "author": edit_author_obj})



def test(request):
    print(request.GET)
    print(request.GET.get("id"))
    return HttpResponse("OK")


# 书复习代码
def book_test(request):
    # 查询所有的书籍
    # book_list = models.Book.objects.all()
    # # print(book_list)
    # for i in book_list:
    #     print(i)
    #     print(i.title)
    #     print(i.publisher)
    #     print(i.publisher.name)
    #     print(i.publisher.addr)
    #     print("=" * 20)

    # 增加新书
    # new_book_obj = models.Book.objects.create(
    #     title="新书的名字",
    #     publisher_id=10
    # )
    # 增加新书
    publisher_obj = models.Publisher.objects.get(id=10)
    new_book_obj = models.Book.objects.create(
        title="新书的名字2",
        publisher=publisher_obj
    )
    print(new_book_obj)


    return HttpResponse("o98k")

  

posted @ 2018-05-05 10:00  萌哥-爱学习  阅读(108)  评论(0编辑  收藏  举报