第十七篇: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>
原文地址:https://www.cnblogs.com/00doudou00/p/7810118.html