zoukankan      html  css  js  c++  java
  • 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')
    
    
  • 相关阅读:
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    自考感悟,话谈备忘录模式
    [每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理
    Java实现 蓝桥杯 算法提高 p1001
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 因式分解
    Java实现 蓝桥杯 算法提高 因式分解
  • 原文地址:https://www.cnblogs.com/dengz/p/11407696.html
Copyright © 2011-2022 走看看