本篇内容

  简单图书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>

第十七篇:django基础(二)的更多相关文章

  1. day 66 Django基础二之URL路由系统

    Django基础二之URL路由系统   本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11 ...

  2. day 53 Django基础二之URL路由系统

    Django基础二之URL路由系统   本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11 ...

  3. Django基础二静态文件和ORM

    Django基础二静态文件和ORM 目录 Django基础二静态文件和ORM 1. 静态文件 1.1 静态文件基本配置: 1.2 静态文件进阶配置 2. request参数 3. Django配置数据 ...

  4. 第一篇:Django基础

    Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...

  5. Django基础(二):环境配置

    前戏 WEB框架简介 具体介绍Django之前,必须先介绍WEB框架等概念. web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子. 一般web框 ...

  6. Django 基础二(View和urls)

    上一篇博文已经成功安装了python环境和Django,并且新建了一个空的项目.接下来就可以正式开始进行Django下 的Web开发了.首先进入项目的主目录: cd ./DjangoLearn/hol ...

  7. Django基础二之URL路由系统

    一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

  8. python 自动化之路 day 19 Django基础[二]

    Django - 路由系统 url.py - 视图函数 views.py - 数据库操作 models.py - 模板引擎渲染 - HttpReponse(字符串) - render(request, ...

  9. 02.Django基础二之URL路由系统

    一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

  10. python django基础二URL路由系统

    URL配置 基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数 ...

随机推荐

  1. 1.初识Quartz

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/QuartzDemo.git 前言: 接触一个新事物的开始,我们都会产生一些疑问: Quartz是什 ...

  2. 基于java开发的开源代码GPS北斗位置服务监控平台

    最近在研究位置服务平台,基于全球卫星定位技术(GNSS).互联网技术.空间地理信息技术(GIS).3G/4G无线通信技术,面向全国公众用户建立大容量.实时.稳定的位置信息服务运营平台.实现管理目标的实 ...

  3. AMD、CMD和CommonJS规范(转)

    CommonJS规范  CommonJS是在浏览器环境之外构建JavaScript生态系统为目标产生的项目,比如服务器和桌面环境中.CommonJS规范是为了解决JavaScript的作用域问题而定义 ...

  4. 解决 div或者a标签的高度比里面的img高度多的 问题

    今天做练习遇到一个问题,分享一下解决办法: 在编写html中的一个放置图片时,代码如下: <div class="nrtp"> <div class=" ...

  5. expect配合shell 实现自动分发秘钥文件

    expect使用场景 有时候需要批量地执行一些操作,或者执行自动化的操作的时候,有些指令需要交互式地进行这就会有很多麻烦,linux下有一个程序交expect,它可以模拟键盘输入文本,省去人工干预交互 ...

  6. SSO 单点登录总结(PHP)

    本篇文章根据个人理解的知识整理汇总,如有不足之处,请大家多多指正. 单点登录(SSO--Single Sign On)的应用是很普遍的,尤其在大型网站系统中,比如百度,登录百度账号和,再转到百度经验. ...

  7. Python解压ZIP、RAR等常用压缩格式的方法

    解压大杀器 首先祭出可以应对多种压缩包格式的python库:patool.如果平时只用基本的解压.打包等操作,也不想详细了解各种压缩格式对应的python库,patool应该是个不错的选择. pato ...

  8. DNS无法区域传送(axfr,ixfr)

    这两天博主在学习dns服务器的配 首先简单介绍一下axfr,ixfr axfr:完全区域传送 ixfr :增量区域传送 主要是在dns主从服务器上面进行备份更新的. ----------------- ...

  9. C语言字符篇(五)内存函数

    memcpy不可以把目的地址写成本身 但是memmove可以,因为它是先保存到临时空间 #include <string.h>   void *memcpy(void *dest, con ...

  10. ElasticSearch 环境安装

    1)官网安装教程: http://www.elasticsearch.org/guide/reference/setup/installation/   2)简单安装: http://log.medc ...