第十七篇:django基础(二)
本篇内容
简单图书crm系统
编写views
views:作为MVC中的C,接收用户的输入,调用数据库Model层和业务逻辑Model层,处理后将处理结果渲染到V层中去。
app01/views.py:
from django.shortcuts import render, HttpResponse, redirect # Create your views here. from app01 import models def index(request): bookList = models.Book.objects.all() return render(request, "app01/index.html", {"bookList": bookList}) def add(request): if request.method == "POST": title = request.POST.get("title") pubdate = request.POST.get("pubdate") price = request.POST.get("price") publish = request.POST.get("publish") models.Book.objects.create(title=title, pubDate=pubdate, price=price, publish=publish) return redirect("/index") return render(request, "app01/add.html") def delbook(request, id): models.Book.objects.filter(id=id).delete() return redirect("/index") def editbook(request, id): if request.method == "POST": title = request.POST.get("title") pubdate = request.POST.get("pubdate") price = request.POST.get("price") publish = request.POST.get("publish") models.Book.objects.filter(id=id).update(title=title, pubDate=pubdate, price=price, publish=publish) return redirect("/index/") edit_book = models.Book.objects.filter(id=id)[0] return render(request, "app01/edit.html", {"edit_book": edit_book})
编写urls
urls,程序的入口,支持正则匹配访问url,将访问url映射到views中的具体某个函数中。
为了能调用到上面这个views,我们需要将views.index函数映射到URL中。
我们可以创建一个urls.py 在App目录下。
app01/urls.py:
"""crm URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^add/', views.add), url(r'^del/(\d+)', views.delbook), url(r'^edit/(\d+)', views.editbook), ]
编写models
models与数据库操作相关,是django处理数据库的一个特色之处,它包含你的数据库基本字段与数据。通过一系列封装的api可以直接操作数据库。当然,也支持原生sql。
既然models与数据库相关,那么首先需要配置数据库
1、数据库设置,mysite/settings.py:
这里默认使用内置的sqlite3,配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
app01/models.py:
from django.db import models # Create your models here. class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) pubDate = models.DateField() price = models.DecimalField(max_digits=6, decimal_places=2) publish = models.CharField(max_length=32)
控制台分别运行:
$ python manage.py makemigrations $ python manage.py migrate
编写html
app01/templates/index:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>主页</title> <link rel="stylesheet" href="/static/bootstrap-3.3.7/dist/css/bootstrap.css"> <style> .container{ margin-top: 100px; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <a href="/add/"><button class="btn btn-primary">添加</button></a> <table class="table table-hover"> <tr> <th>编号</th> <th>书名</th> <th>出版日期</th> <th>价格</th> <th>出版社</th> <th>操作</th> </tr> {% for book_obj in bookList %} <tr> <td>{{ forloop.counter }}</td> <td>{{ book_obj.title }}</td> <td>{{ book_obj.pubDate | date:"Y-m-d"}}</td> <td>{{ book_obj.price }}</td> <td>{{ book_obj.publish }}</td> <td> <a href="/edit/{{ book_obj.id }}"><button class="btn btn-info">编辑</button></a> <a href="/del/{{ book_obj.id }}"><button class="btn btn-danger">删除</button></a> </td> </tr> {% endfor %} </table> </div> </div> </div> </body> </html>
app01/templates/add:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加页面</title> </head> <body> <form action="/add/" method="post"> <p>书名:<input type="text" name="title"></p> <p>出版日期:<input type="date" name="pubdate"></p> <p>价格:<input type="text" name="price"></p> <p>出版社:<input type="text" name="publish"></p> <input type="submit"> </form> </body> </html>
app01/templates/edit:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>编辑页面</title> </head> <body> <form action="/edit/{{ edit_book.id }}" method="post"> <p>书名:<input type="text" name="title" value="{{ edit_book.title }}"></p> <p>出版日期:<input type="date" name="pubdate" value="{{ edit_book.pubDate|date:'Y-m-d' }}"></p> <p>价格:<input type="text" name="price" value="{{ edit_book.price }}"></p> <p>出版社:<input type="text" name="publish" value="{{ edit_book.publish }}"></p> <input type="submit"> </form> </body> </html>