文章目录

  • 一、数据库展示
  • 二、视图(view)展示
  • 三、路由(urls)展示
  • 四、各前端展示
    • 1.add_author.html
    • 2.publisher_list.html
    • 3.add_publisher.html
    • 4.edit_publisher.html
    • 5.book_list.html
    • 6.add_book.html
    • 7.edit_book.html
    • 8.author_list.html
    • 9.edit_author.html
    • 10.sendemail.html
    • 11.login.html
    • 12.index.html
  • 五、settings展示

一、数据库展示

创建user ,publisher,book,author数据库名

from django.db import models# Create your models here.
class User(models.Model):username=models.CharField(max_length=128,verbose_name='用户名',null=False)password=models.CharField(max_length=128,verbose_name='密码',null=False)email=models.CharField(max_length=255,verbose_name='邮箱',null=False)class Publisher(models.Model):id=models.AutoField(primary_key=True)name=models.CharField(max_length=32)address=models.CharField(max_length=32)class Book(models.Model):id=models.AutoField(primary_key=True)title=models.CharField(max_length=32)price=models.DecimalField(max_digits=5,decimal_places=2,default=10.01)inventory=models.IntegerField(verbose_name="库存数")sale_num=models.IntegerField(verbose_name="卖出数")publisher=models.ForeignKey(to='Publisher',on_delete=models.CASCADE)class Author(models.Model):id=models.AutoField(primary_key=True)name=models.CharField(max_length=32)book=models.ManyToManyField(to='Book')

二、视图(view)展示

import redis
from django.http import HttpResponse
from django.shortcuts import render,redirect
from app01.models import Publisher,Book,Author,User
# from alipay import AliPay
# Create your views here.
from django.views import View
from django.core.mail import send_mail
import random
class Index(View):def get(self,request):return render(request,'index.html',locals())def post(self,request):return render(request,'index.html',locals())from bookproject.settings import REDIS_CONdef vercode(user):res1 = ""for i in range(4):num = random.randint(0, 9)res1 += str(num)REDIS_CON.set(f'{user}', res1)print(type(user))REDIS_CON.expire(f'{user}', 300)return res1
class Send_email(View):def get(self,request):subject='邮箱标题'from_email='3246609065@qq.com'a= request.GET.get('email')message = vercode(a)recipient_list = [a,]send_mail(subject=subject, message=message, from_email=from_email, recipient_list=recipient_list)return render(request,'sendemail.html',locals())def post(self,request):msg = ''yzm=request.POST.get('yzm')a=request.POST.get('username')b=request.POST.get('password')c=request.POST.get('email')d = REDIS_CON.get(c)if a=='' or b=='' or c=='':msg='信息不能为空'return render(request, 'sendemail.html', locals())if yzm != d:msg='验证码不正确'return render(request, 'sendemail.html', locals())User.objects.create(username=a,password=b,email=c).save()msg='注册成功'return render(request, 'sendemail.html', locals())class Login(View):def get(self,request):return render(request,'login.html',locals())def post(self,request):return render(request,'login.html',locals())class Add_Publisher(View):def get(self,request):return render(request,'add_publisher.html',locals())def post(self,request):error_msg=''name=request.POST.get('name')address=request.POST.get('address')if name=='' or address=='':error_msg = '信息不能为空'return render(request, 'add_publisher.html', locals())Publisher.objects.create(name=name,address=address).save()error_msg='提交成功'return redirect('/app01/publisher_list/',locals())class Publisher_List(View):def get(self,request):publisher_obj_list = Publisher.objects.all()return render(request,'publisher_list.html',locals())def post(self,request):publisher_obj_list=Publisher.objects.all()return render(request, 'publisher_list.html', locals())class Delete_Publisher(View):def get(self,request):id=request.GET.get('id')Publisher.objects.filter(id=id).delete()return redirect('/app01/publisher_list/',locals())class Edit_Publisher(View):def get(self,request):id=request.GET.get('id')publisher_obj=Publisher.objects.get(id=id)publisher_obj_list=Publisher.objects.all()return render(request,'edit_publisher.html',locals())def post(self,request):id=request.POST.get('id')name = request.POST.get('name')address=request.POST.get('address')publisher_obj=Publisher.objects.get(id=id)publisher_obj.name = namepublisher_obj.address = addresspublisher_obj.save()publisher_obj_list=Publisher.objects.all()return redirect('/app01/publisher_list/',locals())class Book_List(View):def get(self,request):book_obj_list = Book.objects.all()return render(request,'book_list.html',locals())def post(self,request):return render(request,'book_list.html',locals())class Add_Book(View):def get(self,request):publisher_obj_list=Publisher.objects.all()return render(request,'add_book.html',locals())def post(self,request):name=request.POST.get('title')publisher_id=request.POST.get('publisher_id')price=request.POST.get('price')inventory=request.POST.get('inventory')sale_num=request.POST.get('sale_num')Book.objects.create(title=name,publisher_id=publisher_id,price=price,inventory=inventory,sale_num=sale_num).save()return redirect('/app01/book_list/',locals())class Delete_Book(View):def get(self,request):id=request.GET.get('id')Book.objects.filter(id=id).delete()return redirect('/app01/book_list')class Edit_Book(View):def get(self,request):id=request.GET.get('id')book_obj=Book.objects.filter(id=id).first()publisher_list=Publisher.objects.all()return render(request,'edit_book.html',locals())def post(self,request):id=request.POST.get('id')name=request.POST.get('name')price=request.POST.get('price')inventory=request.POST.get('inventory')sale_num=request.POST.get('sale_num')publisher_id=request.POST.get('publisher_id')Book.objects.filter(id=id).update(title=name,publisher_id=publisher_id,price=price,inventory=inventory,sale_num=sale_num)return redirect('/app01/book_list/',locals())class Author_list(View):def get(self,request):ret_list = []author_obj_list = Author.objects.all()for author_obj in author_obj_list:book_obj_list = author_obj.book.all()print(author_obj)print(book_obj_list)ret_dic = {}ret_dic['author_obj'] = author_objret_dic['book_list'] = book_obj_listret_list.append(ret_dic)return render(request,'author_list.html',locals())def post(self,request):return render(request, 'author_list.html', locals())class Add_Author(View):def get(self,request):book_obj_list=Book.objects.all()return render(request,'add_author.html',locals())def post(self,request):name=request.POST.get('name')book_ids=request.POST.getlist('books')author_obj=Author.objects.create(name=name)author_obj.book.set(book_ids)return redirect('/app01/author_list/',locals())class Delete_Author(View):def get(self,request):id=request.GET.get('id')Author.objects.filter(id=id).delete()return redirect('/app01/author_list/',locals())class Edit_Author(View):def get(self,request):id=request.GET.get('id')author_obj=Author.objects.get(id=id)book_obj_list=Book.objects.all()return render(request,'edit_author.html',locals())def post(self,request):id=request.POST.get('id')name=request.POST.get('name')book_ids=request.POST.getlist('books')author_obj=Author.objects.filter(id=id).first()author_obj.name = nameauthor_obj.book.set(book_ids)author_obj.save()return redirect('/app01/author_list/',locals())

三、路由(urls)展示


from django.contrib import admin
from django.conf.urls import url
from django.urls import path
from app01 import viewsfrom app01.views import Add_Publisher,Publisher_List,Delete_Publisher,Edit_Publisherurlpatterns = [# path('admin/', admin.site.urls),# path('register/', views.Register.as_view()),# path('login/', views.Login.as_view()),path('publisher_list/', views.Publisher_List.as_view()),  # 出版社列表path('add_publisher/', views.Add_Publisher.as_view()),  # 添加出版社path('edit_publisher/', views.Edit_Publisher.as_view()),  # 修改出版社path('delete_publisher/', views.Delete_Publisher.as_view()),  # 删除出版社path('book_list/', views.Book_List.as_view()),  # 图书列表path('add_book/', views.Add_Book.as_view()),  # 图书列表path('delete_book/', views.Delete_Book.as_view()),  # 图书删除path('edit_book/', views.Edit_Book.as_view()),  # 修改图书path('author_list/', views.Author_list.as_view()),  # 作者列表path('add_author/', views.Add_Author.as_view()),  # 添加作者path('edit_author/', views.Edit_Author.as_view()),  # 编辑作者path('delete_author/', views.Delete_Author.as_view()),  # 删除作者# path('send_email/', views.send_email),# path('sendemail/', views.sendEmail),# path('test_alipay/', views.test_alipay),  # 删除作者path('sendemail/', views.Send_email.as_view()),path('login/', views.Login.as_view()),path('index/', views.Index.as_view()),]

四、各前端展示

1.add_author.html

代码如下(示例):


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">Submit</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><!--这是表格--><form action="" method="post"><h3 style="color: #3c763d">添加作者</h3>{% csrf_token %}<p>作者名称: <input type="text"  name="name"></p><p>书本名称:<select  multiple  name="books" >{% for book_obj in book_obj_list %}<option value="{{ book_obj.title }}">{{ book_obj.title }}</option>{% endfor %}</select></p><p><button type="submit" class="btn">提交</button></p></form></body>
</html>

2.publisher_list.html

代码如下(示例):


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><h3 style="color: #3c763d">出版社列表</h3><!--这是表格--><a href="/app01/add_publisher/">添加出版社</a>
<table border="1" class = "table table-hover table-bordered"><thead><tr><th>序号</th><th>出版社id</th><th>名称</th><th>地址</th><th>操作</th></tr></thead><tbody>{% for publisher_obj in publisher_obj_list %}<tr><td> {{ forloop.counter }}</td><td> {{ publisher_obj.id }}</td><td> {{ publisher_obj.name }}</td><td> {{ publisher_obj.address }}</td><td><a href="/app01/edit_publisher/?id={{ publisher_obj.id }}">修改</a></td><td><a href="/app01/delete_publisher/?id={{ publisher_obj.id }}">删除</a></td></tr>{% endfor %}</tbody>
</table><!--这是页码-->
<nav aria-label="Page navigation"><ul class="pagination"><li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li></ul>
</nav></body>
</html>

3.add_publisher.html


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>图书管理系统</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><h1 class="text-center">图书管理系统</h1><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><form action="" method="post"><h3 style="color: #3c763d">添加出版社</h3>{% csrf_token %}<p>出版社名称: <input type="text"  name="name"></p><p>出版社地址:<input type="text" name="address"></p><p><button type="submit" class="btn">提交</button></p></form>
{{ error_msg }}</body>
</html>

4.edit_publisher.html


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">Submit</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><!--这是表格--><form action="" method="post"><h3 style="color: #3c763d">编辑书籍</h3>{% csrf_token %}<p>出版社id: <input type="text" name="id" value="{{ publisher_obj.id }}"></p><p>出版社名称: <input type="text"  name="name" value="{{ publisher_obj.name }}"></p><p>出版社地址:<input type="text" name="address" value="{{ publisher_obj.address }}">
{#         <select name="address" id="">#}
{#             {% for publisher_obj in publisher_obj_list%}#}
{#                 {% if publisher_obj in  publisher_obj.publisher.all%}#}
{#                    <option  selected value="{{ publisher_obj.id }}">{{ publisher_obj.address }}</option>#}
{#                 {% else %}#}
{#                     <option value="{{ publisher_obj.id }}">{{ publisher_obj.address}}</option>#}
{#                 {% endif %}#}
{#             {%endfor %}#}</p><p><button type="submit" class="btn">提交</button></p></form></body>
</html>

5.book_list.html


<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]-->
</head>
<body>
<!--分页名称-->
<h1 class="text-center">图书管理系统</h1>
<!--这是导航栏-->
<nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse"data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav>
<!--这是表格-->
<div class="container-fluid"><div class="row-fluid"><div class="span12"><h3 class="text-success">图书列表</h3><a class="tian" style="color:#f82f48;font-weight: 900" href="/app01/add_book/">添加图书</a><table class="table table-hover table-bordered"><thead><tr><th>序号</th><th>图书id</th><th>名称</th><th>价格/元</th><th>库存/册</th><th>卖出数/册</th>
{#                    <th>作者</th>#}<th>出版社名称</th><th>出版社地址</th><th>操作</th></tr></thead><tbody>{% for book_obj in book_obj_list %}<tr><td> {{ forloop.counter }}</td><td> {{ book_obj.id }}    </td><td> {{ book_obj.title }} </td><td> {{ book_obj.price }} </td><td> {{ book_obj.inventory }} </td><td> {{ book_obj.sale_num }} </td>
{#                        <td>#}
{#                            {% for author_obj in author_obj_list %}#}
{#                                {% if book_obj in book_obj.book.all %}#}
{#                                    <option  selected value="{{ author_obj.id }}">{{ author_obj.name }}</option>#}
{#                                {% endif %}#}
{#                            {% endfor %}#}
{#                        </td>#}<td> {{ book_obj.publisher.name }}</td><td> {{ book_obj.publisher.address }}</td><td><a href="/app01/edit_book/?id={{ book_obj.id }}">修改</a><a href="/app01/delete_book/?id={{ book_obj.id }}">删除</a></td></tr>{% endfor %}</tbody></table></div></div>
</div>
<!--这是页码-->
<nav aria-label="Page navigation"><ul class="pagination"><li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li></ul>
</nav></body>
</html>

6.add_book.html


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><form action="" method="post"><h3 style="color: #3c763d">添加图书</h3>{% csrf_token %}<p>添加图书名称: <input type="text"  name="title"></p><p>添加图书价格: <input type="text"  name="price"></p><p>添加图书库存数: <input type="text"  name="inventory"></p><p>添加图书卖出数: <input type="text"  name="sale_num"></p><p>出版社:<select multiple name="publisher_id" >{% for publisher_obj in publisher_obj_list %}<option value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option>{% endfor %}</select></p><p><button type="submit" class="btn">提交</button></p></form></body>
</html>

7.edit_book.html


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">Submit</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><!--这是表格--><form action="" method="post"><h3 style="color: #3c763d">编辑书籍</h3>{% csrf_token %}<p>图书id :<input type="text" name="id" placeholder="{{ book_obj.id }}" value="{{ book_obj.id }}"></p><p>图书名称: <input type="text"  name="name" value="{{ book_obj.title }}"></p><p>图书价格: <input type="text"  name="price" value="{{ book_obj.price }}"></p><p>图书库存数: <input type="text"  name="inventory" value="{{ book_obj.inventory }}"></p><p>图书卖出数: <input type="text"  name="sale_num" value="{{ book_obj.sale_num }}"></p><p>出版社名称:<select name="publisher_id" id="publisher_id">{% for publisher_obj in publisher_list%}{% if book_obj in  book_obj.book.all%}<option  selected value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option>{% else %}<option value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option>{% endif %}{%endfor %}</select></p><p><button type="submit" class="btn">提交</button></p></form></body>
</html>

8.author_list.html


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><h3 style="color: #3c763d">作家列表</h3><!--这是表格--><a style="color: #ac2925", href="/app01/add_author/">添加作者</a><table border="1"  class="table table-hover table-bordered"><thead><tr><th>序号</th><th>作者id</th><th>作者</th><th style="text-align: center">图书</th><th>操作</th></tr></thead><tbody>{% for ret_dic in ret_list %}<tr><td>{{ forloop.counter }}</td><td>{{ ret_dic.author_obj.id}}</td><td>{{ ret_dic.author_obj.name}}</td><td>{% for book_obj in ret_dic.book_list %}{% if forloop.last%}{{ book_obj.title }}{% else %}{{ book_obj.title }} |{% endif %}{% endfor %}</td><td><a href="/app01/edit_author/?id={{ ret_dic.author_obj.id }}">修改</a><a href="/app01/delete_author/?id={{ ret_dic.author_obj.id }}">删除</a></td></tr>{% endfor %}</tbody></table><!--这是页码--><nav aria-label="Page navigation"><ul class="pagination"><li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li></ul>
</nav></body>
</html>

9.edit_author.html


<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>图书管理系统</title><!-- Bootstrap --><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --><!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><!--分页名称--><h1 class="text-center">图书管理系统</h1><!--这是导航栏--><nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/app01/book_list/">首页</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li><li class="active"><a href="/app01/author_list/">作者列表</a></li><li class="active"><a href="/app01/publisher_list/">出版社列表</a></li><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></li></ul><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="Search"></div><button type="submit" class="btn btn-default">Submit</button></form><ul class="nav navbar-nav navbar-right"><li><a href="#">Link</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</a></li><li><a href="#">Another action</a></li><li><a href="#">Something else here</a></li><li role="separator" class="divider"></li><li><a href="#">Separated link</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav><!--这是表格--><form action="" method="post"><h3 style="color: #3c763d">编辑作者</h3>{% csrf_token %}<p>作者id  : <input type="text"  name="id"  value="{{ author_obj.id }}"></p><p>作者名称: <input type="text"  name="name"  value="{{ author_obj.name }}"></p><p>书籍名称:<select  multiple name="books" id="" >{% for book_obj in book_obj_list %}{% if book_obj in book_obj.book.all %}<option selected value="{{ book_obj.id }}">{{ book_obj.title }}</option>{% else %}<option value="{{ book_obj.id }}">{{ book_obj.title }}</option>{% endif %}{% endfor %}</select></p><p><button type="submit" class="btn">提交</button></p></form></body>
</html>

10.sendemail.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/css/layui.css"><script src="{% static 'jquery-3.3.1.js' %}"></script>
</head>
<body>
<form action="" method="post">{% csrf_token %}
<div class="form-group"><div class="layui-input-block" style="text-align: center"><h1>注册界面</h1><br><br>用户名:<input type="text" name="username" value=""><br><br>密码:<input type="text" name="password" value=""><br><br><label for="exampleInputName2">邮箱地址</label><input type="text" class="form-control" id="email" name="email" placeholder="请输入电子邮箱"/><br><br>邮箱验证码:<input type="text" name="yzm" value=""><br><br></div><div class="layui-input-block" style="text-align: center"><input type="button" id="btn" value="发送验证码" onclick="settime(this);send()"/><br><br><input type="submit" value="注册"></div>
</div>
</form><script type="text/javascript">function send() {console.log('re')$.ajax({url: "http://127.0.0.1:8000/app01/sendemail/",type: "GET",data: "email=" + $("#email").val(),success: function (msg) {alert("发送邮件了");}});}var countdown = 10;function settime(val) {if (countdown == 0) {val.removeAttribute("disabled");val.value = "免费获取验证码";countdown = 10;return;} else {val.setAttribute("disabled", true);val.value = "重新发送(" + countdown + ")";countdown--;}setTimeout(function () {settime(val)}, 1000)}</script>
</body>
</html>

11.login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/css/layui.css"><script src="/static/layui.js" charset="utf-8"></script>
</head>
<body>
<ul class="layui-nav" lay-filter=""><li class="layui-nav-item"><a href="">最新活动</a></li><li class="layui-nav-item "><a href="">产品</a></li><li class="layui-nav-item"><a href="">大数据</a></li><li class="layui-nav-item"><a href="javascript:;">解决方案</a><dl class="layui-nav-child"> <!-- 二级菜单 --><dd><a href="">移动模块</a></dd><dd><a href="">后台模版</a></dd><dd><a href="">电商平台</a></dd></dl></li><li class="layui-nav-item"><a href="">社区</a></li></ul><div class="layui-form-item"><label class="layui-form-label" >密码框</label><div class="layui-input-inline"><input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"></div><div class="layui-form-mid layui-word-aux">辅助文字</div></div><div class="layui-form-item"><label class="layui-form-label">选择框</label><div class="layui-input-block"><select name="city" lay-verify="required"><option value=""></option><option value="0">北京</option><option value="1">上海</option><option value="2">广州</option><option value="3">深圳</option><option value="4">江西</option></select></div></div><div><button style="background:blue;border-radius: 50%;width: 150px;height: 150px">提交</button></div><div id="demo0"></div>
<script>layui.use(['laypage','layer'],function (){var laypage=layui.laypage,layer=layui.layer;laypage.render({elem:'demo0',count:data.length,first:'首页',last:'尾页',theme:'#ff5722'});});
</script>
<script src="/static/layui.js" charset="utf-8"></script>
{{ time |date:"Y-m-d:H:i:s" }}
<script src="/static/jquery-3.3.1.js"></script>
<script>alert("hello world.");
</script></body>
</html>

12.index.html

{#<!DOCTYPE html>#}
{#<html lang="en">#}
{#<head>#}
{#    <meta charset="UTF-8">#}
{#    <title>Title</title>#}
{#</head>#}
{#<body>#}
{#<form action="/app01/sendemail/" method="POST">#}
{#    {% csrf_token%}#}
{#    <button type="submit">邮件</button>#}
{#</form>#}
{#</body>#}
{#</html>#}<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>首页</title><link rel="stylesheet" href="/static/css/layui.css">
</head>
<body><div><fieldset class="layui-elem-field layui-field-title" style="margin-top: 100px;"><legend style="text-align: center"><h1 style="color: aqua " >欢迎来到知识的海洋馆</h1></legend></fieldset><hr class="layui-border-orange"></div><div style="text-align: center"><button  class="layui-border-red" style="border-radius: 50%;width: 300px;height: 300px"><a style="color:pink"  href="/app01/register/"><h2>请开始注册吧</h2></a></button></div><div style="text-align: center"><button class="layui-border-blue"  style=" border-radius: 50%;width: 300px;height: 300px"><a style="color:red" href="/app01/login/">请开始登录吧</a></button></div>
</body>
</html>

五、settings展示

"""
Django settings for bookproject project.Generated by 'django-admin startproject' using Django 3.0.3.For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""import os# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import redisBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '_i&8!ot$4yc1-yiul$uow_b$hxznq6*2(-+ibuv_y&zf6gt)63'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'bookproject.urls'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',],},},
]WSGI_APPLICATION = 'bookproject.wsgi.application'# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': "bookshop",'USER': "root",'PASSWORD':'000000','HOST': '','PORT':3306}
}EMAIL_HOST = 'smtp.qq.com'
# 设置端口号,为数字   使用SSL,端口号465或587
EMAIL_PORT = 25
#设置发件人邮箱
EMAIL_HOST_USER = '@qq.com'
# 设置发件人 授权码
EMAIL_HOST_PASSWORD = ''
EMAIL_FROM = "@qq.cofm"
#nctsmpktpsmseafc
#gynbopmewexcdhid
# 设置是否启用安全链接
EMAIL_USER_TLS = True# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_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')]REDIS_CON = redis.StrictRedis(host = 'localhost',port = 6379)

菜鸟学做Django--图书管理系统相关推荐

  1. hive导数据到mysql 自增主键出错_python+mysql做一个图书管理系统?

    开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括: 图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库 ...

  2. 简单用java做一个图书管理系统

    简单用java做一个图书管理系统 首先,我们创建一个View类当做它的视图页 package view;import service.BookService; import service.UserS ...

  3. python做数据库管理系统_python+mysql做一个图书管理系统?

    开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括:图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库表 ...

  4. oracle图书管理项目案例,C#+oracle做的图书管理系统

    [实例简介] 学生时代用C#+Oracle做的管理系统,希望对学生有用 [实例截图] [核心代码] 图书管理系统 └── 图书管理系统 ├── 123课程设计报告.doc ├── oracle课程设计 ...

  5. django图书管理系统:

    目录 图书管理系统: day54 文件夹: settings.py: urls.py migrations文件夹 __ init __ models.py: views.py static文件夹 te ...

  6. 用python3做一个图书管理系统(图形用户界面:tkinter)

    kongzhi.py#主控模块from socket import * from tkinter import * from ts_denglu import *s = socket() s.sets ...

  7. 用链表做一个图书管理系统

    这几天一直尝试去用链表写这个图书管理系统,本来想在图书管理系统中写个文件管理操作,写了挺久也没写对,最后只能在用户登录操作中写了个简单的文件管理操作.如果有哪里写的不好还请大家见谅!继续加油! 目录 ...

  8. 菜鸟学做seo全套教程

    现在网路上面有很多SEO的所谓入门教程,但是大多数都是属于高手级别的,真正能够让菜鸟学到的东西并不多. 我现在交给新手如何做seo 首先我们需要向大家阐述一下什么叫做SEO: SEO是Search E ...

  9. python django图书管理系统_Python框架:Django写图书管理系统(LMS)

    Django模版文件配置 文件路径 test_site -- test_site -- settings.py TEMPLATES = [ { 'BACKEND': 'django.template. ...

  10. 菜鸟学做——三层交换综合模拟实验【1】

    第一次发技术文章,以后还请大家多多关照. 本人最近学习三层交换,为了掌握所学便决定用小凡模拟器做这个实验.在做实验之前,查阅了一些资料和书籍.其中参考了51cto博客   凌激冰.dgpl_pan 两 ...

最新文章

  1. Excel中如何截取字符串中指定字符后的部分字符
  2. Level/levelup-2-API
  3. 【webrtc】webrtc的rtp重传代码分析
  4. mysql数据存储方式_数据存储在mysql的两种方式
  5. 程序员养发(老师付推荐)
  6. 20140704笔试面试总结(java)
  7. Chapter 3 Phenomenon——13
  8. 注意升级Oracle 19c:SE2标准版不再支持RAC
  9. python 三维图片 任意切片_在python中实现将一张图片剪切成四份的方法
  10. python123.io能不能补交作业_作业分配问题-回溯法-Python3
  11. Spring整合JavaMail
  12. 环信即时通讯在工程中的安装——Nusen_Liu
  13. ORACLE11g R2数据库安装(一)
  14. 锐起无盘服务器陈列设置,原创]锐起无盘安装全图文设置,含SCII设置在内
  15. 谷歌浏览器设置默认Flash
  16. 中国国航往返飞机票怎么改签
  17. IntentFilter详解
  18. 2022-06-29 AndroidR 获取接近传感器Proximity Sensor的信号,休眠和唤醒。
  19. matlab图像进行变换
  20. 【线性代数】四、二次型

热门文章

  1. IBM Notes Domino V10.0.1第一组语言包发布!
  2. JAVA计算机毕业设计基于web的民宿预定系统源码+数据库+系统+lw文档
  3. 给大学生的劝告,你们为何应该开始接触 Unix/Linux
  4. Neuralog.v2013.06 1CD (测井曲线智能矢量化软件)
  5. vmlogin效果怎么样?亚马逊防关联超级浏览器,电商多账号管理神器
  6. 订餐系统oracle实训报告,网上订餐系统设计报告.doc
  7. 这款开源神器,让你能在 iPad 上随心所欲写代码!
  8. 软件工程-系统设计工程
  9. matlab跑微分方程画图,偏微分方程工具箱PDE
  10. PyQt4---QTextBrowser