Urls.py
from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from app02 import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'index/',views.index),
url(r'addBook/',views.addbook),
url(r'update/',views.update),
url(r'delete/',views.delete),
url(r'select/',views.select),
]
views.py
from django.shortcuts import render, HttpResponse
# Create your views here.
from app02.models import *
def index(request):
return render(request, "index.html")
# 添加数据方法一:通过实例对象添加
# def addbook(request):
#
# b=Book(name="python基础",price=99,author="han",pub_date="2017-12-12")
# b.save()
#
# return HttpResponse("添加成功")
# 添加数据方法二:
def addbook(request):
Book.objects.create(name="JAVA基础", price=50, author="han", pub_date="2017-12-12")
# Book.objects.create(**dic)
return HttpResponse("添加成功")
# 表记录修改方法一:filter update
# def update(request):
# # 先查 后改
# Book.objects.filter(id="1").update(price=999)
#
# return HttpResponse("修改成功!")
# 表记录修改方法二:get
def update(request):
# get方法
b = Book.objects.get(id="2")
b.price = 200
b.save()
return HttpResponse("修改成功!")
def delete(request):
Book.objects.filter(id="1").delete()
return HttpResponse("删除成功!")
# 查询方法一:
def select(req):
# book_list = Book.objects.all()
# print(book_list)
# print(book_list[0]) # PHP
# 也可以进行切片
# book_list = Book.objects.all()[:2] # 切片 查两条出来
# book_list = Book.objects.filter(author='han') # filter 可以取出多条结果 如果按照作者来取,作者有两个就可以用filter
# book_list = Book.objects.get(id=2) # get 只能取出来一条
book_list = Book.objects.filter(id=2).values("name","price") #values 通过查到ID=2的一条记录 然后取出name字段的值
return render(req, "index.html", {"book_list":book_list})
# def select(req):
# book_list = Book.objects.all()
# # print(book_list)
# # print(book_list[0]) # PHP
# return render(req, "index.html", {"book_list":book_list})
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
.head{
line-height: 40px;
background-color: green;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div class="outer">
<div class="head">标题</div>
<div class="contend">
<a href="/addBook/">添加书籍</a>
<a href="/update">修改书籍</a>
<a href="/delete">删除书籍</a>
<a href="/select/">查询书籍</a>
<hr>
<div class="queryResult" >
{% for book in book_list %}
<div>
<p>{{ book.name }} {{ book.author }} {{ book.price }}</p>
</div>
{% endfor %}
</div>
</div>
</div>
</body>
</html>
settings.py
# settings.py中最后面加上这个 当你执行修改的时候可以看到语句
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
# 查询相关API:
# 查询相关API:
# <1>filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
# <2>all(): 查询所有结果
# <3>get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
# -----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------
# <4>values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
# <5>exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
# <6>order_by(*field): 对查询结果排序
# <7>reverse(): 对查询结果反向排序
# <8>distinct(): 从返回结果中剔除重复纪录
# <9>values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
# <10>count(): 返回数据库中匹配查询(QuerySet)的对象数量。
# <11>first(): 返回第一条记录
# <12>last(): 返回最后一条记录
# <13>exists(): 如果QuerySet包含数据,就返回True,否则返回False。