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
相关推荐
古希腊掌管学习的神几秒前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
一道微光14 分钟前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
微服务 spring cloud16 分钟前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡18 分钟前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷20 分钟前
Redis
数据库·redis·缓存
wm104334 分钟前
java web springboot
java·spring boot·后端
四口鲸鱼爱吃盐42 分钟前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
是娜个二叉树!1 小时前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python
互联网杂货铺1 小时前
Postman接口测试:全局变量/接口关联/加密/解密
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman