setting.py部分代码:
DEBUG = True ALLOWED_HOSTS = ["*"] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'Book.apps.BookConfig', ]
DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # }, 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'bookdate', # 数据库名字 'USER': 'root', # 链接数据库用户名 'PASSWORD': 'Sloveb55555..', # 链接数据库密码 'HOST': '127.0.0.1', # 数据库链接地址 'POST': '3306', # 数据库链接端口 } }
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] MEDIA_ROOT = os.path.join(BASE_DIR, 'static/uploads')
---------------------------------------------------------------------------------------------------------------------------
主路由:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('book/', include(('Book.urls', 'book'), namespace='book')), ]
---------------------------------------------------------------------------------------------------------------------------
__init__.py:代码
import pymysql pymysql.install_as_MySQLdb()
----------------------------------------------------------------------------------------------------------------------------
分支路由:
urlpatterns = [ url('getbook/', views.get_book, name='get_book'), url('addbook/', views.add_book, name='add_book'), url('delbook/', views.del_book, name='del_book'), url('delallbook/', views.del_allbook, name='del_allbook'), url('updatebook/', views.update_book, name='update_book'), ]
----------------------------------------------------------------------------------------------------------------------------
models.py 数据表
class Books(models.Model): # 图书ID:默认自动创建,这里手动创建 booksid = models.AutoField(primary_key=True, unique=True, null=False, max_length=11) # 图书种类:如果用默认值就必须得用max_length booksspecies = models.CharField(max_length=6, default='计算机') # 图书名称,null=False:不允许为空值,unique=True:不允许重复 booksname = models.CharField(max_length=16, null=False, unique=True) # 图书几本 booksnumber = models.IntegerField(null=False) # 图书国籍:中国,美国,英国 bookscountry = models.CharField(max_length=4, null=False) # 图书是否入库:默认值没有入库 booksstorage = models.BooleanField(default=False) # 图书价格 booksmoney = models.CharField(max_length=10, null=False) # 添加图书时间:auto_now_add:第一次创建的时候自动设置当前日期,默认值:false bookstimes = models.DateTimeField(auto_now=True) #图书图片名称 booksimg_name=models.CharField(max_length=30, null=False, unique=True) # 图书图片:upload_to='%Y/%m/%d/icons'每张图片都有自己独立的按时间日期的文件夹,当天上传的图片都放在一个文件夹当中 booksimg = models.FileField(null=True,upload_to='%Y/%m/%d/pic') class Meta: # 更改表名称为Books,如果不更改就是,App名_models类名。 db_table = 'Books'
----------------------------------------------------------------------------------------------------------------------------
views.py 视图
import os from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render, redirect from django.urls import reverse from Book.models import Books def get_book(request): course_list = Books.objects.all().order_by("booksid") paginator = Paginator(course_list, 10) page = request.GET.get("page", 1) currentPage = int(page) try: video_list = paginator.page(page) except PageNotAnInteger: video_list = paginator.page(1) except EmptyPage: video_list = paginator.page(paginator.num_pages) return render(request, 'allbooks.html', locals()) def add_book(request): if request.method == "GET": return render(request, 'booksadd.html') elif request.method == "POST": booksname = request.POST.get("booksname") booksnumber = request.POST.get("booksnumber") bookscountry = request.POST.get("bookscountry") booksstorage = request.POST.get("booksstorage") booksmoney = request.POST.get("booksmoney") money = format(float(booksmoney), '.2f') booksimg_name = request.POST.get("booksimg_name") booksimg = request.FILES.get("booksimg") max_upload_size = 5242880 extenedname = booksimg_name[booksimg_name.rindex('.') + 1:] allowedname = ['jpg', 'png', 'pdf', 'txt', 'zip'] if extenedname not in allowedname or (booksimg.size > max_upload_size): return render(request, 'booksadd.html') # 使用try...except的原因是注册的用户名有可能会一样,except Exception as ex:是捕获所有异常 try: st_save = Books() st_save.booksname = booksname st_save.booksnumber = booksnumber st_save.bookscountry = bookscountry st_save.booksstorage = booksstorage st_save.booksmoney = money st_save.booksimg_name = booksimg_name st_save.booksimg = booksimg st_save.save() except Exception as ex: return redirect(reverse("book:add_book")) return redirect(reverse("book:get_book")) def update_book(request): if request.method == "GET": getbooksid = request.GET.get("booksid") ob = Books.objects.get(booksid=getbooksid) context = {'data': ob} return render(request, 'booksupdate.html', context) elif request.method == "POST": try: postbooksid = request.POST.get("booksid") obs = Books.objects.get(booksid=postbooksid) obs.booksname = request.POST['booksname'] obs.booksnumber = request.POST['booksnumber'] obs.bookscountry = request.POST['bookscountry'] obs.booksstorage = request.POST['booksstorage'] obs.booksmoney = format(float(request.POST['booksmoney']), '.2f') obs.booksimg_name = request.POST['booksimg_name'] max_upload_size = 5242880 extenedname = obs.booksimg_name[obs.booksimg_name.rindex('.') + 1:] allowedname = ['jpg', 'png', 'pdf', 'txt', 'zip'] # 判断获取的文件后缀名是否在allowedname中 if extenedname not in allowedname: ob = Books.objects.get(booksid=postbooksid) context = {'data': ob} return render(request, 'booksupdate.html', context) # 如果获取表单文件==None,获取原有数据赋值给obs.booksimg。None是指字段里的值是空白不是null。 if request.FILES.get("booksimg") == None: path_none = str(obs.booksimg) obs.booksimg = path_none obs.save() if request.FILES.get("booksimg") != "": path_null = str(obs.booksimg) obs.booksimg = path_null obs.save() # 再如果获取表单文件的大小大于初始值max_upload_size:将进行返回所有数据重新上传文件 elif request.FILES.get("booksimg").size > max_upload_size: ob = Books.objects.get(booksid=postbooksid) context = {'data': ob} return render(request, 'booksupdate.html', context,) # 再如果获取表单文件!= obs.booksimg原有数据,则进行删除原有目录和文件名,并且把新获取到的目录和文件名进行更新 elif request.FILES.get("booksimg") != obs.booksimg: path_booksimg = 'static/uploads/' + str(obs.booksimg) os.remove(path_booksimg) obs.booksimg = request.FILES.get("booksimg") obs.save() return redirect(reverse('book:get_book')) except Exception as ex: booksid = request.POST.get("booksid") ob = Books.objects.get(booksid=booksid) context = {'user': ob} return render(request, 'booksupdate.html', context) def del_book(request): id = request.GET.get("booksid") onedelete = Books.objects.get(booksid=id) book = onedelete.booksimg path = 'static/uploads/' + str(book) onedelete.delete() os.remove(path) return redirect(reverse("book:get_book")) def del_allbook(request): if request.method == "GET": return render(request, 'allbooks.html') elif request.method == "POST": ids = request.POST.getlist('booksid') for i in ids: deletesql = Books.objects.get(booksid=i) book = deletesql.booksimg path = 'static/uploads/' + str(book) deletesql.delete() os.remove(path) return redirect(reverse('book:get_book'))