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
相关推荐
清风~徐~来10 分钟前
【Qt】控件 QWidget
前端·数据库·qt
想用offer打牌12 分钟前
面试官拷打我线程池,我这样回答😗
java·后端·面试
RockyRich17 分钟前
突然无法调用scikit-learn、xgboost
python·机器学习·scikit-learn
真的很上进17 分钟前
2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required
java·前端·vue.js·python·算法·react·html5
用户69452955217020 分钟前
国内开源版“Manus”——AiPy实测:让你的工作生活走上“智动”化
前端·后端
重庆小透明23 分钟前
【从零学习JVM|第三篇】类的生命周期(高频面试题)
java·jvm·后端·学习
庸子42 分钟前
MySQL从入门到DBA深度学习指南
数据库·mysql·dba
cookqq1 小时前
mongodb源码分析session执行handleRequest命令find过程
数据库·sql·mongodb·nosql
haciii1 小时前
深入理解数据库隔离级别与Spring Boot事务管理
spring boot·mysql
Bro_cat1 小时前
MongoDB 入门指南:安装、配置与 Navicat 连接教程
数据库·mongodb