第十七篇: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>
第十七篇:django基础(二)的更多相关文章
- day 66 Django基础二之URL路由系统
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11 ...
- day 53 Django基础二之URL路由系统
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11 ...
- Django基础二静态文件和ORM
Django基础二静态文件和ORM 目录 Django基础二静态文件和ORM 1. 静态文件 1.1 静态文件基本配置: 1.2 静态文件进阶配置 2. request参数 3. Django配置数据 ...
- 第一篇:Django基础
Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...
- Django基础(二):环境配置
前戏 WEB框架简介 具体介绍Django之前,必须先介绍WEB框架等概念. web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子. 一般web框 ...
- Django 基础二(View和urls)
上一篇博文已经成功安装了python环境和Django,并且新建了一个空的项目.接下来就可以正式开始进行Django下 的Web开发了.首先进入项目的主目录: cd ./DjangoLearn/hol ...
- Django基础二之URL路由系统
一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...
- python 自动化之路 day 19 Django基础[二]
Django - 路由系统 url.py - 视图函数 views.py - 数据库操作 models.py - 模板引擎渲染 - HttpReponse(字符串) - render(request, ...
- 02.Django基础二之URL路由系统
一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...
- python django基础二URL路由系统
URL配置 基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数 ...
随机推荐
- Servlet学习笔记05——什么是jsp?
1. jsp (java server page) (1)jsp是什么? sun公司制订的一种服务器端动态页面技术规范. 注: 因为虽然使用servlet也可以生成动态页面, 但是过于繁琐(需要使用o ...
- filebeat的安装及配置
概述:Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasti ...
- struts2属性驱动模型
属性驱动模型的作用: 因为struts2与servlet API 实现了解耦,无法直接使用HttpServlet Request对象获取表单提交的参数,但Struts2提供了属性驱动模型机制来解决这个 ...
- scrapy--多爬虫
大家好,我胡汉三又回来了!!!开心QAQ 由于最近一直在忙工作的事,之前学的一些爬虫知识忘得差不多了,只能再花多一些时间来回顾,否则根本无法前进.所以在这里也像高中老师那样提醒一下大家,--每天晚上花 ...
- 【Python3】操作文件,目录和路径
1.遍历文件夹和文件 Python代码 import os import os.path rootdir = "d:/test" for parent,dirnames,fi ...
- python之doctest的用法
doctest是python自带的一个模块,你可以把它叫做“文档测试”(doctest)模块. doctest的使用有两种方式:一个是嵌入到python源中.另一个是放到一个独立文件. doctest ...
- Python学习笔记:PEP8常用编程规范
PEP8编码规范是一种非常优秀的编码规范,也得到了Python程序员的普遍认可,如果实践中或者项目中没有统一的编码规范,建议尽量遵循PEP8编码规范,当然如果项目中已经有了自身的编码规范,应当优先遵循 ...
- 007---Django的视图层
视图函数 一个视图函数,简称视图,是一个简单的python函数.它接收web请求并且返回web响应. 1.一张网页的HTML内容 2.一个重定向 3.一个404错误 4.一个xml文档 5.一个字符串 ...
- [Noip2016]组合数(数论)
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- GPIO基础知识
STM32 GPIO入门知识 GPIO是什么? 通用输入输出端口,可以做输入,也可以做输出.GPIO端口可通过程序配置成输入或输出. 引脚和GPIO的区别和联系 STM32的引脚中,有部分是做GPIO ...