当前位置: 首页 > article >正文

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


http://www.kler.cn/news/367040.html

相关文章:

  • 【LeetCode:264. 丑数 II + 小根堆】
  • 15分钟学 Go 第 22 天:包的使用
  • echarts:导入excel生成桑葚图
  • 用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(一)
  • 【论文阅读】ESRGAN+
  • 软考中级嵌入式系统设计师笔记分享(二)
  • c# windows 动态生成CheckBox控件
  • 前端优化:从Vue/React/Svelte的数组更新->渲染策略剖析数组大列表数据展示优化策略
  • Vue3 + TypeScript 实现 iframe 嵌入与通信的完整指南以及全屏弹窗方案
  • 最新ubuntu22.04 下列软件包有未满足的依赖关系 解决方案
  • W25Q64的学习
  • 吉客云与金蝶云星空系统高效数据对接实践
  • 好/坏代码实例解读:图文并茂说明
  • 变频器启动、停止、正/反转控制电路原理详解
  • 现在设备普遍切换成TYPE-C适配器后,一拖三数据线接口变革探析
  • 卡牌抽卡机小程序,带来新鲜有趣的拆卡体验
  • 006:看图软件ACDSeePhotoStudio2019安装教程
  • gaussdb hccdp实验练习02 GaussDB数据库开发设计
  • PDF无法转换成其他格式的常见原因与解决方法解析
  • 【LangChain系列3】【检索模块详解】
  • Vue.js 组件开发教程:从基础到进阶
  • gin入门教程(6):全局中间件,自定义中间件
  • springboot 集成支付宝扫描支付
  • 微博舆情数据分析(一)pandas + matplotlib 作图
  • 基于图像拼接算法及实现
  • 数据结构——插入排序