books/urls.py

 
  1. """books URL Configuration
  2.  
  3. The `urlpatterns` list routes URLs to views. For more information please see:
  4. https://docs.djangoproject.com/en/1.11/topics/http/urls/
  5. Examples:
  6. Function views
  7. 1. Add an import: from my_app import views
  8. 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
  9. Class-based views
  10. 1. Add an import: from other_app.views import Home
  11. 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
  12. Including another URLconf
  13. 1. Import the include() function: from django.conf.urls import url, include
  14. 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
  15. """
  16. from django.conf.urls import url
  17. from django.contrib import admin
  18. from book_obj import views
  19.  
  20. urlpatterns = [
  21. url(r'^admin/', admin.site.urls),
  22. url(r'^books/', views.book),
  23. url(r'^add_books/', views.add_book),
  24. url(r'^del_books/', views.del_book),
  25. url(r'^edit_books/', views.edit_book),
  26. ]
 

books/settings.py

 
  1. """
  2. Django settings for books project.
  3.  
  4. Generated by 'django-admin startproject' using Django 1.11.15.
  5.  
  6. For more information on this file, see
  7. https://docs.djangoproject.com/en/1.11/topics/settings/
  8.  
  9. For the full list of settings and their values, see
  10. https://docs.djangoproject.com/en/1.11/ref/settings/
  11. """
  12.  
  13. import os
  14.  
  15. # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
  16. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  17.  
  18. # Quick-start development settings - unsuitable for production
  19. # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
  20.  
  21. # SECURITY WARNING: keep the secret key used in production secret!
  22. SECRET_KEY = '@9_h!7w793k^6uw95^ooybm1+xx4&)u35n%cnfl+%sz@7_^+^8'
  23.  
  24. # SECURITY WARNING: don't run with debug turned on in production!
  25. DEBUG = True
  26.  
  27. ALLOWED_HOSTS = []
  28.  
  29. # Application definition
  30.  
  31. INSTALLED_APPS = [
  32. 'django.contrib.admin',
  33. 'django.contrib.auth',
  34. 'django.contrib.contenttypes',
  35. 'django.contrib.sessions',
  36. 'django.contrib.messages',
  37. 'django.contrib.staticfiles',
  38. 'book_obj.apps.BookObjConfig',
  39. ]
  40.  
  41. MIDDLEWARE = [
  42. 'django.middleware.security.SecurityMiddleware',
  43. 'django.contrib.sessions.middleware.SessionMiddleware',
  44. 'django.middleware.common.CommonMiddleware',
  45. # 'django.middleware.csrf.CsrfViewMiddleware',
  46. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  47. 'django.contrib.messages.middleware.MessageMiddleware',
  48. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  49. ]
  50.  
  51. ROOT_URLCONF = 'books.urls'
  52.  
  53. TEMPLATES = [
  54. {
  55. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  56. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  57. ,
  58. 'APP_DIRS': True,
  59. 'OPTIONS': {
  60. 'context_processors': [
  61. 'django.template.context_processors.debug',
  62. 'django.template.context_processors.request',
  63. 'django.contrib.auth.context_processors.auth',
  64. 'django.contrib.messages.context_processors.messages',
  65. ],
  66. },
  67. },
  68. ]
  69.  
  70. WSGI_APPLICATION = 'books.wsgi.application'
  71.  
  72. # Database
  73. # https://docs.djangoproject.com/en/1.11/ref/settings/#databases
  74.  
  75. DATABASES = {
  76. 'default': {
  77. 'ENGINE': 'django.db.backends.mysql',
  78. 'NAME': "book_db",
  79. "HOST" : "127.0.0.1",
  80. "USER" : "root",
  81. "PASSWORD" : "333",
  82. "PORT" : 3306,
  83. }
  84. }
  85.  
  86. # Password validation
  87. # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
  88.  
  89. AUTH_PASSWORD_VALIDATORS = [
  90. {
  91. 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
  92. },
  93. {
  94. 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
  95. },
  96. {
  97. 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
  98. },
  99. {
  100. 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
  101. },
  102. ]
  103.  
  104. # Internationalization
  105. # https://docs.djangoproject.com/en/1.11/topics/i18n/
  106.  
  107. LANGUAGE_CODE = 'en-us'
  108.  
  109. TIME_ZONE = 'UTC'
  110.  
  111. USE_I18N = True
  112.  
  113. USE_L10N = True
  114.  
  115. USE_TZ = True
  116.  
  117. # Static files (CSS, JavaScript, Images)
  118. # https://docs.djangoproject.com/en/1.11/howto/static-files/
  119.  
  120. STATIC_URL = '/static/'
  121. STATIC_DIRS = [
  122. os.path.join(BASE_DIR,"static")
  123. ]
 

book_obj/__init__.py

  1. import pymysql
  2. pymysql.install_as_MySQLdb()

book_obj/models.py

 
  1. from django.db import models
  2.  
  3. # Create your models here.
  4. class Pbook (models.Model):
  5. name = models.CharField(max_length=32,unique=True)
  6.  
  7. def __str__(self):
  8. return self.name
 

book_obj/views.py

 
  1. from django.shortcuts import render,HttpResponse,redirect
  2. from book_obj import models
  3.  
  4. # Create your views here.
  5. def book(request):
  6. all = models.Pbook.objects.all().order_by("id")
  7. return render(request,"book.html",{"bookconcerns": all})
  8.  
  9. #增加出版社
  10. def add_book(request):
  11. add_name,err_msg = "",""
  12. if request.method =="POST":
  13. add_name = request.POST.get("new_name")
  14. pub_list = models.Pbook.objects.filter(name=add_name)
  15. if add_name and not pub_list:
  16. models.Pbook.objects.create(name=add_name)
  17. print("1")
  18. return redirect("/books/")
  19. if not add_name:
  20. err_msg = "输入内容不能为空"
  21. if pub_list:
  22. err_msg = "出版社已存在"
  23. return render(request,"add_book.html",{"err_name" : add_name,"err_msg" : err_msg})
  24.  
  25. #删除出版社
  26. def del_book(request):
  27. del_id = request.GET.get("id")
  28. del_list = models.Pbook.objects.filter(id=del_id)
  29. if del_list:
  30. del_list.delete()
  31. return redirect("/books/")
  32. else:
  33. return HttpResponse("删除失败")
  34.  
  35. #编辑出版社
  36. def edit_book(request):
  37. edit_id = request.GET.get("id")
  38. edit_list = models.Pbook.objects.filter(id=edit_id)
  39. err_msg = ""
  40. if request.method == "POST":
  41. edit_name = request.POST.get("new_name")
  42. check_list = models.Pbook.objects.filter(name=edit_name)
  43. if edit_name and edit_list and not check_list:
  44. edit_obj = edit_list[0]
  45. edit_obj.name = edit_name #更改name值
  46. edit_obj.save() #更改后保存在数据库中
  47. return redirect("/books/")
  48. if check_list:
  49. err_msg = "出版社已存在"
  50. if not edit_name:
  51. err_msg = "出版社不能为空"
  52. if edit_list:
  53. edit_obj = edit_list[0]
  54. return render(request,"edit_book.html",{"old_obj" : edit_obj,"err_msg" : err_msg})
  55. else:
  56. return HttpResponse("数据不存在哦")
 

templates/book.html

 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>出版社</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  7. <style>
  8. .cc{
  9. margin-left: 90%;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <table class="table table-bordered">
  15. <thead>
  16. <tr>
  17. <th>序号</th>
  18. <th>ID</th>
  19. <th>出版社</th>
  20. <th>基操</th>
  21. <th>勿6</th>
  22. </tr>
  23. </thead>
  24. <tbody>
  25. {% for bookconcern in bookconcerns %}
  26. <tr>
  27. <td>{{ forloop.counter }}</td>
  28. <td>{{ bookconcern.id }}</td>
  29. <td>{{ bookconcern.name }}</td>
  30. <td>
  31. <a href="/del_books/?id={{ bookconcern.id }}">
  32. <button type="button" class="btn btn-danger">删除</button>
  33. </a>
  34. </td>
  35. <td>
  36. <a href="/edit_books/?id={{ bookconcern.id }}">
  37. <button type="button" class="btn btn-warning">编辑</button>
  38. </a>
  39. </td>
  40. </tr>
  41. {% endfor %}
  42. </tbody>
  43. </table>
  44. <a href="/add_books/" class="cc"><button type="button" class="btn btn-primary">增加出版社</button></a>
  45. </body>
  46. </html>
 

templates/add_book.html

 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>增加出版社</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  7. <style>
  8. .input-group-addon{
  9. width: 150px;
  10. }
  11. .form-control{
  12. width: 300px;
  13. }
  14. #vv{
  15. position: relative;
  16. left: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <form action="" method="post">
  22. <span>
  23. <span class="input-group-addon">出版社名称:</span>
  24. <input type="text" name="new_name" value="{{ err_name }}" class="form-control" aria-label="Amount (to the nearest dollar)">
  25. <button class="btn btn-primary" id="vv">提交</button>
  26. </span>
  27. <span>{{ err_msg }}</span>
  28.  
  29. </form>
  30. </body>
  31. </html>
 

templates/edit_book.html

 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>编辑页面</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  7. </head>
  8. <body>
  9. <h3>编辑出版社</h3>
  10. <form action="" method="post">
  11. <p>出版社名称:<input type="text" name="new_name" value="{{ old_obj.name }}"></p><span>{{ err_msg }}</span>
  12. <button class="btn btn-warning">提交</button>
  13. </form>
  14. </body>
  15. </html>
 

Django之单表的增删改查的更多相关文章

  1. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  2. python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)

    day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...

  3. hibernate对单表的增删改查

    ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...

  4. django模型层 关于单表的增删改查

    关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...

  5. Django学习笔记--数据库中的单表操作----增删改查

    1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...

  6. django 利用ORM对单表进行增删改查

    牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...

  7. Django中对单表的增删改查

    之前的简单预习,重点在后面 方式一: # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象   book_obj=Book.objects.creat ...

  8. Django中多表的增删改查操作及聚合查询、F、Q查询

    一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...

  9. Django 文件配置、pycharm及django连接数据库、表的增删改查 总结

    静态文件配置 1.你在浏览器中输入网址能够有响应的资源返回给你 是因为后端已经提前给你开设该资源的接口,也就意味着你所能 访问到的资源 都是人家事先定义好的 2.django如何给用户开设资源接口呢? ...

随机推荐

  1. ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二)

    UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加 ...

  2. ListBox,CheckBoxList,DropDownList,RadioButtonList的常见数据绑定

    ListBox,CheckBoxList,DropDownList,RadioButtonList的常见用法 四个都是选择控件,用法大同小异,基本都是指定键值对: 直接加选择项: void way1( ...

  3. JS语法学习笔记

    JS语法: JS知识点一览图 JS知识点一览图 在function中写this,在本function中可以显示,写Person则显示undefined. 在function中写Person,在func ...

  4. centos 7 安装JDK (Linux安装jdk)

    centos 7安装JDK (Linux安装jdk) 第一部分 首先查看centos 7是否有openjdk,如没有就跳过第一部分,直接第二部分. [master@bogon ~]$ java -ve ...

  5. codevs 1277 生活大爆炸 2012年CCC加拿大高中生信息学奥赛

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题目描述 Description Sheldon and Leonard are physicists wh ...

  6. 洛谷 P2916 [USACO08NOV]为母牛欢呼Cheering up the Cows

    题目描述 Farmer John has grown so lazy that he no longer wants to continue maintaining the cow paths tha ...

  7. poj1595 水题

    题意:输入n, 和c  统计1 - n 有多少个素数为cnt 若 2*c > cnt 则将素数全部输出 否则分支判断:  若cnt 为偶数,则从中心开始输出2*c 个  若cnt 为奇数,则从中 ...

  8. JS实现跑马灯效果(向左,向上)

    <html> <head> <title>JS实现跑马灯效果</title> <style> * { font-size:12px; fon ...

  9. 新数据的GT列表

    制作新数据集时需要重新制作train_GT,test_GT 代码: dic = {} with open('/home/bnrc/all_image_GT.txt','r') as file: for ...

  10. blog.yiz96.com

    欢迎访问我的新博客 blog.yiz96.com