Django---简易图书管理系统(B/S架构)

Django---简易图书管理系统

一丶配置

创建app01

# 1.在具有manage.py文件的目录下,启动cmd,创建一个新的app01
    python manage.py startapp app01
    
# 2.在settings配置文件中对 app01进行注册   
    INSTALLED_APPS=[
        'app01.apps.App01Config',
    ]
    
# 额外:创建整个项目时,创建新的app,pycharm会默认帮你注册 . 若是cmd创建,需要手动注册

静态文件配置:

# settings文件,配置静态资源
    STATIC_URL = '/static/'    # 固定写法: 映射关系,从项目中引入静态资源是通过/static/开头
   
    STATICFILES_DIRS=[         # 固定写法: 项目文件夹下创建一个static文件夹'存放'静态资源. 
        os.path.join(BASE_DIR,'static')
    ]

数据库配置:

# settings文件,配置数据库 (使用的是mysql数据库,库需要先创建好)
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
            'NAME': 'day55_bookmgsystec',          # 数据库名
            'USER': 'XXX',                        # 用户
            'PASSWORD': 'XXX',                    # 密码
            'HOST': '127.0.0.1',                  # ip地址
            'PORT': 3306,                         # 端口
        }
    }
    
    
# 由于使用的是mysql数据库.python3需要使用pymysql去连接数据库.默认提供的数据库连接不支持mysql
    # 1.在与项目同名的文件夹下 ,找到__init__.py文件
    # 2.编写连接代码
        import pymysql
        pymysql.install_as_MySQLdb()  # 连接mysql数据库

额外:

# 在settings文件中找到下面的句子注释掉. post提交数据时需要进行校验
    'django.middleware.csrf.CsrfViewMiddleware',

二丶数据库编写

使用orm操作数据库:

# 1.找到app01下的 models.py文件. 创建表和字段
    class Pub(models.Model):                    # Pub 类名 等同于 表名
        pid=models.AutoField(primary_key=True)    # pid 类的属性 等同于 表的字段(AutoFiled:自增)
        pname=models.CharField(max_length=32,unique=True)   # pname 同理

数据迁移

# 1.在models.py文件已经编写好了表的信息. 需要把信息同步到数据库
# 2.启动Terminal窗口执行两条命令
    # 检查models.py文件是否进行了变更,并记录.会在migrations文件夹下创建一个变更记录文件
        python manage.py makemigrations   
    
    # 将在migrations文件夹下创建一个变更记录文件,同步到数据库
        python manage.py migrate

三丶路由关系

查看

# 1.在url.py穿件一个请求和函数的对应关系
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r'^publisher_list/', views.publisher_list),
    ]

   
# 2.在app01下的views.py文件中编写函数
    from app01 import models  # 导入 models文件,使用orm操作数据库
        # 查询列表
        def publisher_list(request):
            
            # 查询全部的内容, 按照pid排序
            all_pub = models.Pub.objects.all().order_by('pid')
            
            # 返回一个页面,并把数据传到页面
            return render(request, 'publisher_list.html', {'all_pub': all_pub})
<!-- publisher_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        table, h1 {
            text-align: center;
        }

        button {
            position: absolute;
            top: 60px;
            left: 520px;
        }
    </style>
</head>
<body>
<h1>图书管理系统</h1>
<button>添加</button>
<table border="1px" width="500px" align="center">
    <thead>
    <tr>
        <th>序号</th>
        <th>编号</th>
        <th>出版社名称</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
        <!-- 使用模版语言:把传过来的数据 进行解析,展示
        {{变量}}
        -->
    {% for pub in all_pub %}   
        <tr>
            <td>{{ forloop.counter }}</td> 
            <td>{{ pub.pid }}</td>
            <td>{{ pub.pname }}</td>
            <td>
                <a href="/publisher_edit?pk={{ pub.pk }}">编辑</a> |
                <a href="/publisher_del?pk={{ pub.pk }}">删除</a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
<script>
    window.onload= function () {

        var tag=document.getElementsByTagName('button')[0]
        tag.onclick=function () {
            location.href='/publisher_add'   //添加按钮跳转到添加页面
        }
    }
</script>
</body>
</html>

增加

# 1.在url.py穿件一个请求和函数的对应关系
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r'^publisher_add/', views.publisher_add),
    ]

   
# 2.在app01下的views.py文件中编写函数
    from app01 import models  # 导入 models文件,使用orm操作数据库
        # 添加
        def publisher_add(request):
            
            pub_name, error = '', ''
            # 判断发送方式 是不是post请求
            if request.method == 'POST':
                
                # 获取提交的信息
                pub_name = request.POST.get('pname') # 对应前端inpu, t框的name值

                # 如果输入为空
                if not pub_name:
                    error = '输入的内容为空'
                elif models.Pub.objects.filter(pname=pub_name):
                    # 数据库里是否存在当前数据的值
                    error = '出版社名称已存在'
                else:
                    # 添加
                    # 方式一
                    models.Pub.objects.create(pname=pub_name)
                    # 方式二
                    # obj = models.Publisher(name=pub_name)
                    # obj.save()

                    return redirect(to='/publisher_list/')

            return render(request, 'publisher_add.html', {'error': error, 'data': pub_name})
<!-- publisher_add.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post" style="text-align: center">
    <h1>添加出版社</h1>
    <input type="text" name="pname" value="{{ data }}"/>
    <br>
    <span style="color: red;">{{ error }}</span>
    <br>
    <input type="submit"/>
    <input type="reset" id="rest" value="取消"/>
</form>
<script>
    window.onload = function () {
        var back = document.getElementById('rest')
        back.onclick = function () {
            location.href = '/publisher_list'

        }
    }
</script>
</body>
</html>

编辑

# 1.在url.py穿件一个请求和函数的对应关系
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r'^publisher_edit/', views.publisher_edit),
    ]

   
# 2.在app01下的views.py文件中编写函数
    from app01 import models  # 导入 models文件,使用orm操作数据库
        # 编辑
        def publisher_edit(request):
            error, data = '', ''

            # 从url 获得 pk的值
            pk = request.GET.get('pk')

            # 从数据库里查询符合条件的第一个对象
            obj = models.Pub.objects.filter(pk=pk).first()

            # 从数据库中查不出数据
            if not obj:
                return HttpResponse('更新数据不存在')

            if request.method == 'POST':
                # 获得表单 提交的数据
                pname = request.POST.get('pname')
                if not pname:
                    error = '内容为空'
                elif models.Pub.objects.filter(pname=pname):
                    error = '出版社已存在'
                else:
                    # 更改 已经查询出来 obj对象的值
                    obj.pname = pname
                    # 提交
                    obj.save()
                    return redirect(to='/publisher_list')

            return render(request, 'publisher_edit.html', {'error': error, 'data': obj})
<!-- publisher_edit.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post" style="text-align: center">
    <h1>更新出版社</h1>
    <input type="text" name="pname"  value="{{ data.pname }}"/>
    <br>
    <span style="color: red;">{{ error }}</span>
    <br>
    <input type="submit"  value="更新"/>
    <input type="reset" id="rest"  value="取消"/>
</form>
<script>
    window.onload=function () {
        var back=document.getElementById('rest')
        back.onclick=function () {
            location.href='/publisher_list'
        }
    }
</script>
</body>
</html>

删除

# 1.在url.py穿件一个请求和函数的对应关系
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r'^publisher_del/', views.publisher_del),
    ]

   
# 2.在app01下的views.py文件中编写函数
    from app01 import models  # 导入 models文件,使用orm操作数据库
        # 删除
        def publisher_del(request):
            # 获得url的pk的值
            pk = request.GET.get('pk')

            # 从数据库中查一下, 看看有没有,
            # query = models.Pub.objects.filter(pk=pk) # 对象列表
            obj = models.Pub.objects.filter(pk=pk).first()  # 获取第一个对象

            if not obj:
                return HttpResponse('删除的不存在')

            # 删除数据
            
            # 方式一 ,删除所有列表对象中,符合条件的所有值
            # query.delete()
            
            # 方式二 # 按照索引删
            # query[0].delete()
            
            # 方式三
            obj.delete()
            
            # 跳转到展示页面
            return redirect(to='/publisher_list')
上一篇:Affinity Publisher for Mac(桌面排版软件)


下一篇:java多线程对生产者消费者模式的简单应用