zoukankan      html  css  js  c++  java
  • 图书管理系统 基于form组件

    models:

    from django.db import models
    
    # Create your models here.
    
    
    class Book(models.Model):
        name = models.CharField(max_length = 30)
        price = models.DecimalField(max_digits=30,decimal_places=3)
        date = models.DateTimeField()
        publish = models.ForeignKey(to="Publish",to_field='id',on_delete = models.CASCADE)
        authors = models.ManyToManyField(to='Author')
    
    class Publish(models.Model):
        title = models.CharField(max_length = 30)
        addr = models.CharField(max_length = 30)
    
    class Author(models.Model):
        name = models.CharField(max_length = 30)
        addr = models.CharField(max_length = 30)
        gf = models.OneToOneField(to='Gfriend',to_field='id',on_delete=models.CASCADE)
    
    class Gfriend(models.Model):
        name = models.CharField(max_length =30)
        age = models.IntegerField()
    
    
    
    class User(models.Model):
        name = models.CharField(max_length = 30)
        pwd = models.IntegerField()
        date = models.DateTimeField()
        email = models.EmailField()
    models

    settings配置:

    配置数据库
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'test1',  # 要连接的数据库,连接前需要创建好
            'USER':'root', # 连接数据库的用户名
            'PASSWORD':'zhaoyun',  # 连接数据库的密码
            'HOST':'127.0.0.1',       # 连接主机,默认本级
            'PORT':3306    #  端口 默认3306
        }
    }
    
    
    
    
    
    
    
    
    
    配置静态文件
    
    
    
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static'),
    ]

    init:

    import pymysql
    pymysql.install_as_MySQLdb()

    urls:

    from django.contrib import admin
    from django.urls import path,re_path
    from first import views
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',views.index, name='index'),
        path('add_book/',views.add_book,name='add_book'),
    
        re_path('del_book/',views.del_book ,name='del_book'),
    
        re_path('edit_book/(d+)/',views.edit_book,name = 'edit_book'),
    
    
        path('login/',views.login_session,name='login'),
    
        path('logout/',views.logout,name = 'logout'),
        path('register/',views.register, name = 'register'),
        path('hint/',views.hint,name = 'hint') #这个是你的 跳转注册的界面
    
    
    ]
    urls

    views:

    from django.shortcuts import render,redirect,reverse,HttpResponse
    import json,datetime
    
    from first.models import Book,Author,Publish,User
    
    from first .form import U_ser
    # Create your views here.
    
    #定义一个装饰器  然后所有的 函数都用装饰器进行封装
    def wrapper(func):
        def inner(*args,**kwargs):
            request = args[0]
            # if request.COOKIES.get('is_login'):
            if request.session.get('is_login'):
    
                return func(*args,**kwargs)
            else:
                return redirect(reverse('login'))
    
        return inner
    
    
    
    #登陆函数  cookie
    # def login(request):
    #     print('11111111111111111')
    #     if request.method == 'POST':
    #         name = request.POST.get('user')
    #         pwd = request.POST.get('pwd')
    #         print(name,pwd)
    #         log_obj = User.objects.filter(name = name ,pwd=pwd).first()
    #         if log_obj:  #登陆成功
    #             ret = redirect(reverse('index'))
    #             ret.set_cookie('name',name)
    #             ret.set_cookie('pwd',pwd)
    #             ret.set_cookie('is_login',True)
    #             ret.set_cookie('last_time',log_obj.date)
    #             log_obj.date = datetime.datetime.now()
    #             log_obj.save()
    #
    #             return ret
    #     # return redirect(reverse('login'))
    #     return render(request,'login.html')
    
    
    @wrapper
    #主界面
    def index(request):
        book_list = Book.objects.all()
        publish_list = Publish.objects.all()
        author_list = Author.objects.all()
    
    
        return render(request,'index.html',locals())
    
    @wrapper
    def add_book(request):
        '''
        这是对书籍的信息进行增加的函数
        :param request:
        :return:
        '''
        book_list = Book.objects.all()
        publish_list = Publish.objects.all()
        author_list = Author.objects.all()
    
        if request.method == 'POST':
            name = request.POST.get('name')
            price = request.POST.get('price')
            date = request.POST.get('date')
            publish = request.POST.get('publish')
            author = request.POST.getlist('author')
            print(author)
            book = Book.objects.create(name = name,price = price, date = date ,publish_id=publish)
            book .authors.set(author)  #给你的这个书籍对象 添加作者
    
            return redirect(reverse('index'))  #添加完之后就重新定向到主界面
    
        return render(request,'add_book.html',locals())
    
    
    @wrapper
    def del_book(request):  #删除函数
        deid = request.POST.get('deid')
        print(deid)
        del_book = Book.objects.filter(id = deid)  #获取你前端点击的那个id的书籍对象
        del_book.delete()
        print(111*100)
        return HttpResponse(json.dumps({'status':1}))
    
    @wrapper
    def edit_book(request ,edid):
        # print('___________________________')
        book_list = Book.objects.filter(id=edid).first()
        publish_list = Publish.objects.all()
        author_list = Author.objects.all()
        print(book_list)
        print(6666666666666)
        if request.method =='POST':
            print(2222222222)
    
            name = request.POST.get('name')
            price = request.POST.get('price')
            date = request.POST.get('date')
            publish = request.POST.get('publish')
            author = request.POST.getlist('author')
            # bk_bj =Book.objects.filter(id=edid).update(name=name, price=price, date=date, publish=publish)
            # bk_bj.author.set(author)
            print(3333333333333)
            book_list.name = name
            book_list.price = price
            book_list.publish_id = publish
            book_list.authors.set(author)
            book_list.save()
            return redirect(reverse('index'))
        print(55555555555555)
        return render(request,'edit_book.html',locals())
    
    
    @wrapper
    def logout(request): #注销
        ret = redirect(reverse('login'))
        # ret.delete_cookie('name')
        # ret.set_cookie('last_time')
        # ret.delete_cookie('pwd')
        request.session.flush()
        return ret
    
    
    
    
    
    
    #这个使用session
    def login_session(request):
        print(request.POST)
        if request.method == 'POST':
            name = request.POST.get('user','')
    
            pwd = request.POST.get('pwd','')
    
            user_obj = User.objects.filter(name=name ,pwd =pwd).first()
    
            if user_obj:
                ret = redirect(reverse('index'))
                request.session['is_login'] = True
                request.session['name'] = name
                request.session['pwd'] = pwd
                request.session['last_time'] = str(user_obj.date)  # 你去出的是一个date兑现 但是要存起来就要用 str
                user_obj.date = datetime.datetime.now()
                user_obj.save()
                return ret
            # else:  #这一步是你输入的账号和密码不对的时候
                # return HttpResponse('您输入用户名不对')
            return redirect(reverse('hint'))
        return render(request,'login.html')
    
    
    
    
    #定义一个注册用户的函数
    def register(request):
    
        if request.method == 'POST':
    
            form = U_ser(request.POST)  #把前端的信息和form组件对比判断
            if form.is_valid():#正确
                name = request.POST.get('name')
                pwd = request.POST.get('pwd')
                date = request.POST.get('date')
                email = request.POST.get('email')
                User.objects.create(name = name ,pwd = pwd,date = date,email = email)
    
                return redirect(reverse('login'))  #注册成功就去登陆界面
            else:
    
                g_error = form.errors.get('__all__')  #获取所有的错误
                if g_error:
                    g_error = g_error[0]
                print(locals())
                return render(request,'register.html',locals())
    
        form = U_ser()
        print(55555555555555)
        return render(request,'register.html',locals())
    
    
    
    def hint(request):
        return render(request,'hint.html')
    views

    templates:

    登陆界面:login

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
        <style>
            body {
      padding-top: 40px;
      padding-bottom: 40px;
      background-color: #eee;
    }
    
    .form-signin {
      max- 330px;
      padding: 15px;
      margin: 0 auto;
    }
    .form-signin .form-signin-heading,
    .form-signin .checkbox {
      margin-bottom: 10px;
    }
    .form-signin .checkbox {
      font-weight: normal;
    }
    .form-signin .form-control {
      position: relative;
      height: auto;
      -webkit-box-sizing: border-box;
         -moz-box-sizing: border-box;
              box-sizing: border-box;
      padding: 10px;
      font-size: 16px;
    }
    .form-signin .form-control:focus {
      z-index: 2;
    }
    .form-signin input[type="email"] {
      margin-bottom: -1px;
      border-bottom-right-radius: 0;
      border-bottom-left-radius: 0;
    }
    .form-signin input[type="password"] {
      margin-bottom: 10px;
      border-top-left-radius: 0;
      border-top-right-radius: 0;
    }
    
        </style>
    </head>
    <body>
    
        <div class="container">
    
          <form class="form-signin"  action = '{% url 'login' %}'  method = 'post' novalidate>
              {% csrf_token %}
            <h2 class="form-signin-heading">Please </h2>
            <label for="inputEmail" class="sr-only">Email address</label>
            <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="" name="user">
            <label for="inputPassword" class="sr-only">Password</label>
            <input type="password" id="inputPassword" class="form-control" placeholder="Password" required="" name="pwd">
            <div class="checkbox">
              <label>
                <input type="checkbox" value="remember-me"> Remember me
              </label>
            </div>
            <button class="btn btn-lg btn-primary btn-block" type="submit" >Sign in</button>
    {#          <button class="btn btn-lg btn-info btn-block" type="submit">Register</button>#}
              <a href="{% url 'register' %}" class="btn btn-lg btn-info btn-block" >Register</a>
          </form>
    
        </div>
    
    </body>
    </html>
    login

    注册:register

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
        <style>
            .container {
                margin-top: 80px;
    
            }
    
            {#body {#}
            {#    background-color: darkslategray;#}
            .nide{
                margin-top: 10px;
            }
        </style>
    </head>
    <body>
    
    
    {#<div class="container col-md-3 col-md-offset-4">#}
    {#    <div>#}
    {#        <div>#}
    {#            <div class="bs-example" data-example-id="form-validation-states">#}
    {#    <form>#}
    {#      <div class="form-group has-success">#}
    {#        <label class="control-label" for="inputSuccess1">请输入用户名</label>#}
    {#        <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2">#}
    {##}
    {#      </div>#}
    {#      <div class="form-group has-warning">#}
    {#        <label class="control-label" for="inputWarning1">请输入密码</label>#}
    {#        <input type="text" class="form-control" id="inputWarning1">#}
    {#      </div>#}
    {#      <div class="form-group has-error">#}
    {#        <label class="control-label" for="inputError1">请确认密码</label>#}
    {#        <input type="text" class="form-control" id="inputError1">#}
    {#      </div>#}
    {#        <div class="has-warning form-group">#}
    {#            <input type="submit" value="提交" class="btn btn-info pull-right">#}
    {##}
    {#        </div>#}
    {##}
    {##}
    {##}
    {#    </form>#}
    {#  </div>#}
    {#        </div>#}
    {#    </div>#}
    {#</div>#}
    
    
    <div class="container col-md-5 col-md-offset-3">
        <div >
            <div>
                <form action="" method='post' novalidate>
                    {% csrf_token %}
    
                    {% for foo in form %}
    {#                    循环你的 报错的信息#}
                        <div class="form-group">
                            <label for="">{{ foo.label }}</label>
                            {{ foo }}
                            <span class="pull-right">{{ foo.errors.0 }}</span>
                            {% if foo.label == 'R pwd' %}
                                <span class="pull-right">{{ g_error|default_if_none:'' }}</span>
                            {% endif %}
    
    
                        </div>
    
                    {% endfor %}
    
                    <div class="nide">
                        <input type="submit" value = '提交' class="pull-right btn btn-info">
                    </div>
    
                </form>
            </div>
        </div>
    </div>
    
    </body>
    </html>
    注册

    主界面:index

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
    </head>
    <body>
    
    
    
    <div class="bs-example" data-example-id="inverted-navbar">
        <nav class="navbar navbar-inverse">
          <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand" href="#">图书管理</a>
            </div>
    
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
              <ul class="nav navbar-nav pull-right" >
    {#            <li class="active"><a href="#">{{ request.COOKIES.name }}</a></li>#}
    {#            <li><a href="#">{{ request.COOKIES.last_time }}</a></li>#}
                  <li class="active"><a href="#">{{ request.session.name }}</a></li>
                <li><a href="#">{{ request.session.last_time }}</a></li>
                <li><a href="{% url 'logout' %}">注销</a></li>
              </ul>
            </div><!-- /.navbar-collapse -->
          </div><!-- /.container-fluid -->
        </nav>
      </div>
    
    
    
    
    
    
    <div class="bs-example" data-example-id="contextual-table">
    
        <a href="{% url 'add_book' %}" class="btn btn-info pull-right">添加书籍</a>
        <table class="table">
          <thead>
    
            <tr>
              <th >序号</th>
              <th class="info">名字</th>
              <th>价格</th>
              <th class="warning">出版时间</th>
                <th>出版社</th>
                <th class="success">作者</th>
                <th>操作</th>
                <th>操作</th>
            </tr>
          </thead>
    
          <tbody>
           {% for book in book_list %}
    
            <tr class="active">
              <th scope="row">{{ forloop.counter }}</th>
              <td class="info">{{ book.name }}</td>
              <td class="danger">{{book.price}}</td>
              <td class="success">{{ book.date|date:'Y-m-d' }}</td>
            <td class="active"> {{ book.publish.title }}</td>
            <td class="warning">
                {% for author  in book.authors.all %}
                    {% if not forloop.last %}
                        {{ author.name }}{{ '|' }}
                    {% else %}
                        {{ author.name }}
                    {% endif %}
                {% endfor %}
    
            </td>
               <td><a href="{% url 'edit_book' book.id %}" class="danger  btn btn-info">编辑</a></td>
    
            <td><a  edid = '{{ book.id }}' class='  btn btn-danger'>删除</a></td>
    {#        让这个删除按钮获取要删除的书籍id#}
    
            </tr>
    
          </tbody>
    
            {% endfor %}
        </table>
      </div>
    {% csrf_token %}
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
        $('.btn-danger').click(function(){
            _this = $(this);
            console.log(111,_this)
            $.ajax({
                url:{% url 'del_book' %},
                type:'post',
                data:{
                    deid:_this.attr('edid'),
                    {#当你点击的时候获取你点击的那个对象的id传送到后台#}
                csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
                },
                success: function (data){
                    var data = JSON.parse(data);
                    if(data.status){
                        _this.parent().parent().remove()
                    }
                }
            })
        })
    </script>
    
    
    </body>
    </html>
    index

    编辑:edit_book:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
    
        <style>
            .container{
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
    
    
    <div class="container">
        <div>
            <div>
                <div class="bs-example" data-example-id="form-validation-states">
                    <form action="{% url 'edit_book' book_list.id %}}" method="post">
                    {% csrf_token %}
                        <div class="form-group has-success">
                            <label class="control-label" for="inputSuccess1">书籍名称</label>
                            <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2" name="name"  value="{{ book_list.name }}">
    
                        </div>
                        <div class="form-group has-warning">
                            <label class="control-label" for="inputWarning1">价格</label>
                            <input type="text" class="form-control" id="inputWarning1" name="price" value = {{ book_list.price }}>
                        </div>
                        <div class="form-group has-error">
                            <label class="control-label" for="inputError1">出版时间</label>
                            <input type="date" class="form-control" id="inputError1" name="date" value="{{ book_list.date|date:'Y-n-d:x' }}">
                        </div>
    
    {#                    <div class="form-group has-success">#}
    {#                        <label class="control-label" for="inputSuccess1">书籍名称</label>#}
    {#                        <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2"  name="">#}
    {##}
    {#                    </div>#}
    
                        <div class="form-group has-error">
                            <label class="control-label" for="inputError1" >出版社</label>
    {#                        <input type="text" class="form-control" id="inputError1" name="publish">#}
                            <select name="publish" id="inputError1" class="form-control" >
                                {% for pub in publish_list %}
                                    {% if book_list.publish == pub %}
                                        <option value="{{ pub.id }}" selected>{{ pub.title }}</option>
                                     {% else %}
                                        <option value="{{ pub.id }}" >{{ pub.title }}</option>
                                    
                                    {% endif %}
    
                                {% endfor %}
    
                            </select>
                        </div>
    
                        <div class="form-group has-warning">
                            <label class="control-label" for="inputWarning1">作者</label>
    {#                        <input type="text" class="form-control" id="inputWarning1" name="author">#}
                            <select name="author" id="" multiple class="form-control">
                                {% for author in author_list %}
                                    {% if author in book_list.authors.all %}
                                        <option value="{{ author.id }}" selected >{{ author.name }}</option>
                                     {% else %}
                                        <option value="{{ author.id }}" >{{ author.name }}</option>
    
                                    {% endif %}
    
                                {% endfor %}
    
                            </select>
                        </div>
    
                        <input type="submit" value="提交" class="btn btn-info    pull-right">
                    </form>
                </div>
            </div>
        </div>
    </div>
    
    </body>
    </html>
    编辑

    添加:add_book

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
    
        <style>
            .container{
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
    
    
    <div class="container">
        <div>
            <div>
                <div class="bs-example" data-example-id="form-validation-states">
                    <form action="{% url 'add_book' %}" method="post">
                    {% csrf_token %}
                        <div class="form-group has-success">
                            <label class="control-label" for="inputSuccess1">书籍名称</label>
                            <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2" name="name" value = {{ book_list.name }} >
    
                        </div>
                        <div class="form-group has-warning">
                            <label class="control-label" for="inputWarning1">价格</label>
                            <input type="text" class="form-control" id="inputWarning1" name="price">
                        </div>
                        <div class="form-group has-error">
                            <label class="control-label" for="inputError1">出版时间</label>
                            <input type="date" class="form-control" id="inputError1" name="date">
                        </div>
    
    {#                    <div class="form-group has-success">#}
    {#                        <label class="control-label" for="inputSuccess1">书籍名称</label>#}
    {#                        <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2"  name="">#}
    {##}
    {#                    </div>#}
    
                        <div class="form-group has-error">
                            <label class="control-label" for="inputError1">出版社</label>
    {#                        <input type="text" class="form-control" id="inputError1" name="publish">#}
                            <select name="publish" id="inputError1" class="form-control" selected>
                                {% for publish in publish_list %}
                                    <option value="{{ publish.id }}">{{ publish.title }}</option>
                                {% endfor %}
    
                            </select>
                        </div>
    
                        <div class="form-group has-warning">
                            <label class="control-label" for="inputWarning1">作者</label>
    {#                        <input type="text" class="form-control" id="inputWarning1" name="author">#}
                            <select name="author" id="" multiple class="form-control" multiple>
                                {% for author in author_list.all %}
                                    <option value="{{ author.id }}" >{{ author.name }}</option>
                                {% endfor %}
    
                            </select>
                        </div>
    
                        <input type="submit" value="提交" class="btn btn-info    pull-right">
                    </form>
                </div>
            </div>
        </div>
    </div>
    
    </body>
    </html>
    add_book

    跳转 hint

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .container{
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
    
    
    <script type="text/javascript">
            alert('您输入的用户名不存在 请去注册');
        setTimeout()
    
    
        </script>
    
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
    
    <div class="container">
        <div>
            <div>
                 <a href="{% url 'register' %}" class="btn btn-lg btn-info btn-block" >Register</a>
            </div>
        </div>
    </div>
    
    
    
    
    </body>
    </html>
    hint
  • 相关阅读:
    搭建springCloud网关zuul
    springboot添加https
    SpringBoot上传文件,经过spingCloud-Zuul,中文文件名乱码解决办法
    springboot mongodb jpa常用方法整理
    springboot拦截中自动注入的组件为null问题解决方法
    springboot JPA mysql
    转载Spring Data JPA 指南——整理自官方参考文档
    springboot带有进度条的上传
    HTTP请求示例
    http的N种请求
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/9287789.html
Copyright © 2011-2022 走看看