项目代码连接见:链接:https://pan.baidu.com/s/1mRYMVZkpLdRoqVLbqy8Wkw
提取码:1w25
项目开始前
- 首先在虚拟机中创建django环境
mkvirtualenv -p /usr/bin/python3 books
2.在创建好的环境中安装django框架和pymysql
pip install django==3.2 -i https://pypi.douban.com/simple
pip install pymysql -i https://pypi.douban.com/simple
3.安装下载完成后,使用pycharm连接远程环境,具体操作见本人之前的blog。
4. 将主目录中的settings.py文件修改ALLOWED_HOSTS = [‘*’]。
5. 依次建立templates文件存放html文件,static文件存档css,img和js文件,本文的前端页面在上方文件连接中,这里不一一赘述。
6.建立好上述文件后,修改settings中的文件。
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',
],
},
},
]
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
App的建立和路由分配
- 新建app,使用命令python manage.py startapp book_admin,同时注册app至settings中。
- 在新建的app中新建路由文件,并在主路由中分配子路由。
主路由books/urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('book/',include('book_admin.urls'))
]
子路由book_admin/urls.py,具有增删改查的功能
from django.urls import path,include
from . import views
urlpatterns = [
path('index/',views.index),
path('add/',views.add,name = 'add'),
path('list/',views.list,name='list'), #这里的name = 'list'对应的是views中的render中的页面跳转
path('update/<id>',views.update,name = 'update'),
path('delete/<id>',views.delete,name = 'delete'),
]
数据库的建立与连接
1.为了将前端获取的数据传至后台并进行保存,依次在虚拟机中进行数据库的建立和连接。
2. 在虚拟机依次输入以下的命令进行数据库的创建。
mysql -uadmin -p
create database `Books`
- 将主目录中的settiings中的数据库相关信息进行修改,如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Books',
'USER':'admin',
'PASSWORD':'qwe123',
'HOST':'127.0.0.1',
'PORT':3306,
}
}
模型映射(建立表格)
- 根据前端页面建立相应的表格存储数据,其中Meta函数是可以自定义表格名字。在新建的app中的models.py文件中写入下方代码:
from django.db import models
# Create your models here.
class Books(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=50) #标题
name = models.CharField(max_length=30) #作者
age = models.IntegerField(default=20) # 出版时间
price = models.DecimalField(max_digits=8,decimal_places=2) #价格,位数为八位,小数点保留两位
publish = models.CharField(max_length=30) #出版社
pub_date = models.DateField() #上传时间
#自定义表的名字
class Meta:
db_table = 'Books'
def __str__(self):
return f'id = {self.id},title = {self.title},name = {self.name},age = {self.age},price = {self.price},publish = {self.publish},pub_date = {self.pub_date}'
- 完成上述代码按照下方命令进行模型映射。
makemigration
migrate
- 通过数据库查看建表是否成功。
mysql> show tables;
+----------------------------+
| Tables_in_Books |
+----------------------------+
| Books |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
11 rows in set (0.00 sec)
mysql> desc Books;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(50) | NO | | NULL | |
| name | varchar(30) | NO | | NULL | |
| age | int | NO | | NULL | |
| price | decimal(8,2) | NO | | NULL | |
| publish | varchar(30) | NO | | NULL | |
| pub_date | date | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
视图函数
本文图书管理实现的功能包括增删改查。
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse
# Create your views here.
#主页的访问,可以加上登录界面进行访问
from book_admin.models import Books
def index(request):
return render(request,'book_admin/index.html')
def add(request):
if request.method == 'GET':
return render(request,'book_admin/add.html')
elif request.method == 'POST':
#从模板获取数据
title = request.POST.get('title')
name = request.POST.get('name')
price = request.POST.get('price')
publish = request.POST.get('publish')
date = request.POST.get('date')
#存储数据到数据库
Books.objects.create(title = title,name=name,price=price,publish=publish,pub_date=date)
# return render(request,'book_admin/list.html')
return redirect(reverse('list')) #页面的重定向
def list(request):
BK = Books.objects.all()
# return render(request,'book_admin/list.html',locals())
return render(request,'book_admin/list.html',locals()) #将数据库中的数据传递到前端页面
def update(request,id):
if request.method == 'POST':
title = request.POST.get('title')
name = request.POST.get('name')
price = request.POST.get('price')
publish = request.POST.get('publish')
date = request.POST.get('date')
Books.objects.filter(id = id).update(title = title,name=name,price=price,publish=publish,pub_date=date)
return redirect(reverse('list'))
#在编辑页面展示需要修改的数据
BK = Books.objects.get(id = id)
return render(request,'book_admin/update.html',locals()) #将数据库中的数据传递到前端页面
def delete(request,id):
Books.objects.get(id=id).delete()
return redirect(reverse('list'))
最终的效果图
- 添加书籍的页面
- 查询书籍的界面
- 编辑书籍的界面
- 删除页面