zoukankan      html  css  js  c++  java
  • 练习-单表查询操作

    项目目录

    要求:实现书籍的增加页面;查看书籍;删除书籍;编辑功能

    创建项目,创建应用app01;检查:settings的app有无创建的app01的应用名;templates有无DIRS;链接mysql数据库表;创建models表中的类

    settings

    #1 检查APP有无自创建的app01
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01.apps.App01Config',
    ]
    
    
    #2 检查templates有无DIRS路径
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    #3 取消原来默认的数据库,创建mysql数据库;数据库名字写上,mysql数据库名字 密码对应上
    
    # Database
    # https://docs.djangoproject.com/en/2.1/ref/settings/#databases
    
    # DATABASES = {
    #     'default': {
    #         'ENGINE': 'django.db.backends.sqlite3',
    #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #     }
    # }
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'book_o1',  # 要连接的数据库,连接前需要创建好
            'USER': 'root',  # 连接数据库的用户名
            'PASSWORD': '123',  # 连接数据库的密码
            'HOST': '127.0.0.1',  # 连接主机,默认本级
            'PORT': 3306  # 端口 默认3306
        }
    }

    找到项目名文件下的init,在里面写入:
    import pymysql
    pymysql.install_as_MySQLdb()
     

    models

    from django.db import models
    
    # Create your models here.
    #在建立好的库下,创建Book表名,设置id,title,pub_date,price,publish字段
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        pub_date = models.DateField()
        price = models.DecimalField(max_digits=8, decimal_places=2)
        publish = models.CharField(max_length=32)

     总结步骤:

    1. 数据库新建一个库
    2. settings 修改一下
    3. makemigrations
    4. migrate

    urls

    from django.contrib import admin
    from django.urls import path,re_path
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('addbook/',views.addbook), # 添加书籍
        path('books/',views.books),  #
        re_path(r"books/(d+)/delete",views.delbook), #捕获值
        re_path(r"books/(d+)/change",views.changebook), #捕获值 d表示1-9之间数字
    ]

    views

    from django.shortcuts import render,HttpResponse,redirect
    
    # Create your views here.
    
    from app01.models import Book
    
    def addbook(request):
        if request.method == "POST":
            title=request.POST.get("title")
            price = request.POST.get("price")
            pub_date = request.POST.get("date")
            publish = request.POST.get("publish")
    
            book_obj=Book.objects.create(title=title,price=price,pub_date=pub_date,publish=publish) # 创造书籍对象
            return redirect("/books/")
        return render(request,"addbook.html")
    
    def books(request):
        book_list = Book.objects.all()  # 获取所有的书籍对象
        return render(request,"books.html",locals())  #返回books 并带所有变量
    
    def delbook(request,id):
        Book.objects.filter(id=id).delete()
        return redirect("/books/")
    
    def changebook(request,id):
        book_obj=Book.objects.filter(id=id).first()
    
        if request.method == "POST":
            title=request.POST.get("title")
            price=request.POST.get("price")
            date=request.POST.get("date")
            publish=request.POST.get("publish")
    
            Book.objects.filter(id=id).update(title=title,price=price,pub_date=date,publish=publish)
            return redirect("/books/")
        return render(request,"changebook.html",{"book_obj":book_obj})

    templates/addbook.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/bs/css/bootstrap.css">
        <style>
            .container{
                margin-top:100px;
            }
    
            .btn{
                margin-top: 10px;
            }
        </style>
    </head>
    <body>
    <h3>添加书籍</h3>
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3">
                    <form action="" method="post">
                        {% csrf_token %}
                        <div>
                            <label for="">书籍名称</label>
                            <input type="text" class="form-control" name="title">
                        </div>
                        <div>
                            <label for="">价格</label>
                            <input type="text" class="form-control" name="price">
                        </div>
                        <div>
                            <label for="">出版日期</label>
                            <input type="date" class="form-control" name="date">
                        </div>
                        <div>
                            <label for="">出版社</label>
                            <input type="text" class="form-control" name="publish">
                        </div>
                        <input type="submit" class="btn btn-success pull-right">
                    </form>
                </div>
            </div>
        </div>
    </body>
    </html>

    templates/books.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/bs/css/bootstrap.css">
        <style>
            .container{
                margin-top:100px;
            }
    
            .btn{
                margin-top: 10px;
            }
        </style>
    </head>
    <body>
    <h3>查看书籍</h3>
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3">
                    <a href="/addbook/" class="btn btn-primary">添加书籍</a>
                    <table class="table table-striped table-bordered">
                        <thead>
                            <tr>
                                <th>书籍名称</th>
                                <th>价格</th>
                                <th>出版日期</th>
                                <th>出版社</th>
                                <th>删除操作</th>
                                <th>编辑操作</th>
                            </tr>
                        </thead>
                        <tbody>
                        {% for book in book_list %}
                            <tr>
                                <td>{{ book.title }}</td>
                                <td>{{ book.price }}</td>
                                <td>{{ book.pub_date|date:'Y-m-d' }}</td>
                                <td>{{ book.publish }}</td>
                                <td><a href="/books/{{ book.pk }}/delete" class="btn btn-danger">删除</a></td>
                                <td><a href="/books/{{ book.pk }}/change" class="btn btn-info">编辑</a></td>
                            </tr>
                        {% endfor %}
                        
                        </tbody>
                    </table>
                </div>
    
            </div>
        </div>
    </body>
    </html>

    templates/changebook.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/bs/css/bootstrap.css">
        <style>
            .container{
                margin-top:100px;
            }
    
            .btn{
                margin-top: 10px;
            }
        </style>
    </head>
    <body>
    <h3>编辑书籍</h3>
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3">
                    <form action="" method="post">
                        {% csrf_token %}
                        <div>
                            <label for="">书籍名称</label>
                            <input type="text" class="form-control" name="title" value="{{ book_obj.title }}">
                        </div>
                        <div>
                            <label for="">价格</label>
                            <input type="text" class="form-control" name="price" value="{{ book_obj.price }}">
                        </div>
                        <div>
                            <label for="">出版日期</label>
                            <input type="date" class="form-control" name="date" value="{{ book_obj.pub_date|date:'Y-m-d' }}">
                        </div>
                        <div>
                            <label for="">出版社</label>
                            <input type="text" class="form-control" name="publish" value="{{ book_obj.publish }}">
                        </div>
                        <input type="submit" class="btn btn-success pull-right">
                    </form>
                </div>
            </div>
        </div>
    </body>
    </html>
  • 相关阅读:
    遗传算法(Genetic Algorithm, GA)及MATLAB实现
    CCF CSP 201809-2 买菜
    PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
    PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
    PAT (Basic Level) Practice (中文)1004 成绩排名 (20 分)
    PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)
    PAT (Advanced Level) Practice 1001 A+B Format (20 分)
    BP神经网络(原理及MATLAB实现)
    问题 1676: 算法2-8~2-11:链表的基本操作
    问题 1744: 畅通工程 (并查集)
  • 原文地址:https://www.cnblogs.com/hexiaorui123/p/10587147.html
Copyright © 2011-2022 走看看