Django项目实战-图书管理系统之项目搭建

Django项目实战-图书管理系统之项目搭建

一、项目开发步骤分析

  1. 创建虚拟环境
  2. 安装 django
  3. 创建工程项目
  4. 创建应用
  5. 修改配置文件
  6. 根据应用需求创建数据模型并进行数据迁移
  7. 创建路由与视图函数
  8. 引入模版文件
  9. 编辑路由、视图函数与模板文件
  10. 项目调试
  11. 重复步骤7、8、9、10新增功能

二、具体实现

  • 1> 创建虚拟环境
  • 2> 安装 django
  • pip install django==3.2

  • 3> 创建工程项目
    django-admin startproject kylin_bookstore

  • 4> 创建应用
    python manage.py startapp users
    python manage.py startapp books

  • 5> 修改配置文件
    • 修改工程配置文件 setting.py

      import os
      ​
      # 允许访问的主机
      ALLOWED_HOSTS = ['*']
      ​
      # 注册应用
      INSTALLED_APPS = [
        ...
          'users.apps.UsersConfig',
          'books.apps.BooksConfig',
      ]
      ​
      # 添加模板文件和自定义标签和过滤器到模板库文件
      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',
                  ],
              },
          },
      ]
      ​
      # 配置数据库(这里我们与上一个工程项目使用同一个用户)
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'HOST': '127.0.0.1',
              'PORT': 5000,
              'USER': 'django',
              'PASSWORD': 'django',
              'NAME': 'book_manage'
          }
      }
      ​
      # 语言
      LANGUAGE_CODE = 'zh-hans'
      ​
      # 时区
      TIME_ZONE = 'Asia/Shanghai'
      # 禁用 Django 的时区转换功能, 使用系统默认的时区
      USE_TZ = False
      ​
      # 配置静态文件
      STATIC_URL = '/static/'
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static_files'),
      ]
      工程同名子目录的__init__.py 配置mysql
      
      
      
      
      
      from pymysql import install_as_MySQLdb
      ​
      install_as_MySQLdb()

  • 6> 根据应用需求创建数据模型并进行数据迁移
    • 使用管理员账户为项目创建一个数据库 book_manage 存放项目数据

      create database book_manage default charset=utf8;

    • 为数据库管理账户授权

      # 授权book_manage数据库下的所有表(book_manage.*)的所有权限(all)给用户django在以任何ip访问数据库('django'@'%')
      grant all on book_manage.* to 'django'@'%'; 
      ​
      # 刷新生效用户权限
      flush privileges;

    • users 应用 文件夹下的 models.py 文件中定义 User 模型类。

      from django.db import models
      ​
      ​
      # Create your models here.
      class User(models.Model):
          GENDER_CHOICES = (
              (0, 'male'),
              (1, 'female')
          )
          username = models.CharField(max_length=20, verbose_name='用户名')
          password = models.CharField(max_length=20)
          gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
          email = models.CharField(max_length=20, null=True, verbose_name='邮箱')
          create_datetime = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
          update_datetime = models.DateTimeField(auto_now=True, verbose_name='修改时间')
          is_admin = models.BooleanField(default=False, verbose_name='是否为管理员')
          is_active = models.BooleanField(default=False, verbose_name='激活状态')
      ​
          class Meta:
              db_table = 'tb_user'
              verbose_name = '用户'
              verbose_name_plural = verbose_name
      ​
          def __str__(self):
              return self.username
      在 books 应用 文件夹下的 models.py 文件中定义 BookInfo 模型类。
      
      
      
      
      
      from django.db import models
      ​
      ​
      # 定义图书模型类BookInfo
      class BookInfo(models.Model):
          book_name = models.CharField(max_length=20, verbose_name='书名')
          author = models.CharField(max_length=20, verbose_name='作者')
          publisher = models.CharField(max_length=20, verbose_name='出版社')
          create_datetime = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
          update_datetime = models.DateTimeField(auto_now=True, verbose_name='修改时间')
          is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
      ​
          class Meta:
              db_table = 'tb_books'
              verbose_name = '图书'
              verbose_name_plural = verbose_name
      ​
          def __str__(self):
              return self.book_name
      ​
      ​
      生成迁移文件并同步到数据库中
      
      
      
      
      
      # 生成迁移文件
      python manage.py makemigrations
      ​
      # 同步到数据库中
      python manage.py migrate

  • 7> 创建路由与视图函数
    • 创建路由

      • 编辑主路由

        from django.contrib import admin
        from django.urls import path, include
        ​
        urlpatterns = [
            path('admin/', admin.site.urls),
        ​
            # 用户登录与注册
            path(r'', include("users.urls")),
        ​
            # 书籍管理
            path(r'books/', include("books.urls")),
        ]
        创建并编辑users应用路由
        
        
        
        
        
        from django.urls import re_path
        from . import views
        ​
        urlpatterns = [
            # 用户登录
            re_path(r'^login$', views.login),
            # 用户注册
            re_path(r'^register$', views.register)
        ]
        创建books应用路由(具体路由映射关系后续根据业务补充)
        
        
        
        
        
        from django.contrib import admin
        from django.urls import path, include
        ​
        urlpatterns = []
        在users应用中编辑视图函数
        
        
        
        
        
        from django.shortcuts import render
        from django.http import HttpResponse
        ​
        ​
        # 登录的视图函数
        def login(request):
            return HttpResponse("这里是登录视图")
        ​
        ​
        # 注册的视图函数
        def register(request):
            return HttpResponse("这里是注册视图")

    • API测试

      登录API: http://127.0.0.1:8080/login
      注册API: http://127.0.0.1:8080/register

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900755.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实现prometheus+grafana的监控部署

直接贴部署用的文件信息了 kubectl label node xxx monitoringtrue 创建命名空间 kubectl create ns monitoring 部署operator kubectl apply -f operator-rbac.yml kubectl apply -f operator-dp.yml kubectl apply -f operator-crd.yml # 定义node-export kubectl app…

Qt 支持打包成安卓

1. 打开维护Qt,双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件,点击下一步, 勾选Android, 点击下一步 3.更新安装中 4.进度100%,完成安装,重启。 5.打开 Qt Creator,编辑-》Preferences... 6.进…

self-supervised learning(BERT和GPT)

1芝麻街与NLP模型 我們接下來要講的主題呢叫做Self-Supervised Learning,在講self-supervised learning之前呢,就不能不介紹一下芝麻街,為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。 因為Bert是一個非常…

maven下载依赖报错Blocked mirror for repositories

原因&#xff1a;Maven版本过高 解决办法 setting文件添加 或者降低maven版本 <mirrors><mirror><id>maven-default-http-blocker</id><mirrorOf>external:dummy:*</mirrorOf><name>Pseudo repository to mirror external reposit…

表格切割效果,“两个”表格实现列对应、变化一致

如何让两个表格的部分列对应且缩放一致 先看效果 使用一个原生table的即可实现 “两个”表格的视觉效果让“两个”表格的对应列缩放保持一致 废话不多说&#xff0c;直接上代码 html: <html><div><table><caption class"table-name">表格…

模拟信号采集显示器+GPS同步信号发生器制作全过程(焊接、问题、代码、电路)

1、制作最小系统板 在制作最小系统板的时候&#xff0c;要用USB转TTL给板子供电&#xff0c;留了一个电源输入的四个接口&#xff0c;同时又用排针引出来VCC和GND用于后续其他外设的电源供应&#xff0c;电源配有电源指示灯和保护电容&#xff0c; 当时在焊接的时候把接口处的…

设计模式(二)工厂模式详解

设计模式&#xff08;二&#xff09;工厂模式详解 简单工厂模式指由一个工厂对象来创建实例,适用于工厂类负责创建对象较少的情况。例子&#xff1a;Spring 中的 BeanFactory 使用简单工厂模式&#xff0c;产生 Bean 对象。 工厂模式简介 定义&#xff1a;工厂模式是一种创建…

机房巡检机器人有哪些功能和作用

随着数据量的爆炸式增长和业务的不断拓展&#xff0c;数据中心面临诸多挑战。一方面&#xff0c;设备数量庞大且复杂&#xff0c;数据中心内服务器、存储设备、网络设备等遍布&#xff0c;这些设备需时刻保持良好运行状态&#xff0c;因为任何一个环节出现问题都可能带来严重后…

java项目之电影评论网站(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的电影评论网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 电影评论网站的主要使用者管…

如何在 Ubuntu 24.04 上安装多PHP版本 (从8.3到5.6) ?

PHP 代表超文本预处理器&#xff0c;它仍然是网络的基石&#xff0c;为互联网上很大一部分网站和网络应用程序提供动力。大多数顶级网站和博客工具仍然使用 PHP&#xff0c;如 WordPress, Facebook, Wikipedia 等。如果你在 Ubuntu 24.04 上为 web 开发&#xff0c;安装 PHP 可…

算法的学习笔记—数组中只出现一次的数字(牛客JZ56)

&#x1f600;前言 在数组中寻找只出现一次的两个数字是一道经典的问题&#xff0c;通常可以通过位运算来有效解决。本文将详细介绍这一问题的解法&#xff0c;深入解析其背后的思路。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f970;数组中只出现一次的数字…

rtsp的2种收流模式

rtsp协商成功以后就是rtp收流&#xff0c;又分为两种模式:rtp over rtsp(tcp)和rtp over udp。 1.rtsp over rtsp 这个现在一般都叫TCP&#xff0c;它的特点是rtsp服务端和客户端是共用一个tcp链接&#xff0c;也就是说rtsp协议报文、rtp包、rtcp数据都是通过这一个链接来交互…

合约门合同全生命周期管理系统:企业合同管理的数字化转型之道

合约门合同全生命周期管理系统&#xff1a;企业合同管理的数字化转型之道 1. 引言 在现代企业中&#xff0c;合同管理已经不再是简单的文件存储和审批流程&#xff0c;而是企业合规性、风险管理和业务流程的关键环节之一。随着企业规模的扩大和合同数量的增加&#xff0c;传统…

第二单元历年真题整理

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 参考答案 1. A 2. A 3. A 4. D 5. D 6. D 解析&#xff1a; 栈和队列是两个不一样的结构&#xff0c;不能放在一起表示 7. B 8. C 解析&#xff1a; S --> A0 | B1 --> (S1 | 1) 0 | (S0 | 0)1 --> S10 | 10 | S…

51单片机快速入门之 模拟 I2C 用精准中断来控制

51单片机快速入门之 模拟 I2C 用精准中断来控制 首先复习一下51单片机快速入门之定时器和计数器(含中断基础) 再看看之前的I2C操作 51单片机快速入门之 IIC I2C通信 定时器/计数器是51单片机中用于实现精确延时的硬件资源。通过配置定时器的初始值和工作模式&#xff0c;可以…

Unable to open nested entry ‘********.jar‘ 问题解决

今天把现网版本的task的jar拖回来然后用7-zip打开拖了一个jar进去替换mysql-connector-java-5.1.47.jar 为 mysql-connector-java-5.1.27.jar 启动微服务的时候就报错下面的 Exception in thread "main" java.lang.IllegalStateException: Failed to get nested ar…

《Python游戏编程入门》注-第2章2

《Python游戏编程入门》的“2.2.5 绘制线条”中提到了通过pygame库绘制线条的方法。 1 相关函数介绍 通过pygame.draw模块中的line()函数来绘制线条&#xff0c;该函数的格式如下所示。 line(surface, color, start_pos, end_pos, width1) -> Rect 其中&#xff0c;第一…

开源限流组件分析(二):uber-go/ratelimit

文章目录 本系列漏桶限流算法uber的漏桶算法使用mutex版本数据结构获取令牌松弛量 atomic版本数据结构获取令牌测试漏桶的松弛量 总结 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit开源限流组件分析&#xff08;二&#xff09;&#xff1a;u…

部署前后端分离若依项目--CentOS7宝塔版

准备&#xff1a; CentOS7服务器一台 通过网盘分享的文件&#xff1a;CentOS 7 h 链接: https://pan.baidu.com/s/17DF8eRSSDuj9VeqselGa_Q 提取码: s7x4 大家有需要可以下载这个&#xff0c;密码61 若依前端编译后文件 通过网盘分享的文件&#xff1a;ruoyi-admin.jar 链…

生信软件39 - GATK最佳实践流程重构,提高17倍分析速度的LUSH流程

1. LUSH流程简介 基因组测序通常用于分子诊断、分期和预后&#xff0c;而大量测序数据在分析时间方面提出了挑战。 对于从FASTQ到VCF的整个流程&#xff0c;LUSH流程在非GVCF和GVCF模式下都大大降低了运行时间&#xff0c;30 X WGS数据耗时不到2 h&#xff0c;从BAM到VCF约需…