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')
    
    
  • 相关阅读:
    .Net Intelligencia.UrlRewriter 重定向参数中文支持配置方法
    Debian 9 vsftpd: version 3.0.3 配置
    Debian 静态网络配置
    iptables常用配置
    Debian防御DDOS(简易版本)
    Debian9+PHP7+MySQL+Apache2配置Thinkphp运行环境LAMP
    Discuz3.3注册程序修改添加记录推荐人账号
    .NetCore WPF 指定一个相对路径的图片,报错“找不到资源”
    C语言的unsigned做双目运算符的奇怪问题
    关于人脸识别的视频图片处理
  • 原文地址:https://www.cnblogs.com/dengz/p/11407696.html
Copyright © 2011-2022 走看看