Django项目实战-图书管理系统之项目搭建
一、项目开发步骤分析
- 创建虚拟环境
- 安装
django
- 创建工程项目
- 创建应用
- 修改配置文件
- 根据应用需求创建数据模型并进行数据迁移
- 创建路由与视图函数
- 引入模版文件
- 编辑路由、视图函数与模板文件
- 项目调试
- 重复步骤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