前言
不做作,还是代码实在
一、Django的数据库
Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM ) Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 这里就介绍,一些关键。得记录在案
1. 常用的代码命令行
python manage.py migrate # 创建表结构
python manage.py makemigrations app # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate app# 创建表结构
2. Setting.py对数据库的修改
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'handsome', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
3. Django 使用 pymysql 模块连接 mysql 数据库:
# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
4.使用模型,必须要创建一个 app
django-admin.py startapp app
5.学习连接
菜鸟教程Django模型层
二、代码温习(增删查改)
1.逻辑层view.py
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
from django.views.decorators.csrf import csrf_exempt
from First import models
def tr(request):
Text = "我的尝试!!"
return HttpResponse(Text)
def home(request):
a = "这是一个表单"
b = [1, 2, 3]
return render(request, 'home.html', context={"a": a, "b": b})
def search(request):
request.encoding = 'UTF-8'
# if request.path==''
#
print(request.path)
if 'q' in request.GET and request.GET['q']:
msg = "你搜索的内容:" + request.GET['q']
else:
msg = '你提交了空表单!'
return render(request, 'getform.html', {"msg": msg})
def searchpost(request):
# res={}
# if request.POST:
# res['result']=request.POST.get('textq')
# print(res['result'])#在控制台看结果
# print(request.path)
return render(request, 'bookform.html')
# 书籍的添加
def add_book(request):
msg = ""
if request.POST:
title = request.POST.get('title')
price = request.POST.get('price')
publish = request.POST.get('publish')
pub_date = request.POST.get('pub_date')
# 这是第一种方法
# book=models.books(title=title,price=price,publish=publish,pub_date=pub_date)
# book.save()#进行保存!!
# 这是第二章方法**推荐
book = models.books.objects.create(title=title, price=price, publish=publish, pub_date=pub_date)
print(book, book.price)
msg = '保存成功!!'
return render(request, 'home.html', {'msg': msg})
# 书籍的查询
def search_book(request):
# 查询所有
# book=models.books.objects.all()
# 查询筛选返回的是 QuerySet 类型数据,类似于 list,使用循环提取出来
# 只能使用等于号 = ,__in __range 用于读取区间,= 号后面为列表 。
# __gt __gte __lt __lte大于号 ,= 号后面为数字。
# __contains __icontains 不区分大小写的包含__startswith 以指定字符开头,__startswith 以指定字符开头,= 号后面为字符串
# __year __month __day 是 DateField 数据类型的年份,= 号后面为数字2008。
# book=models.books.objects.filter(pk=4)#pk是主键primary key=3,==id=3
# exclude() 方法用于查询不符合条件的数据。
# get() 方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,
# 如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误。
# order_by() 方法用于对查询结果进行排序。降序为在字段前面加个负号 -。
# reverse() 方法用于对查询结果进行反转。
# count() 方法用于查询数据的数量返回的数据是整数。
# first() 方法返回第一条数据返回的数据是模型类的对象也可以用索引下标 [0]。
# last() 方法返回最后一条数据返回的数据是模型类的对象不能用索引下标 [-1]
# exists() 方法用于判断查询的结果 QuerySet 列表里是否有数据
# 返回的数据类型是布尔,有为 true,没有为 false。
# 注意:判断的数据类型只能为 QuerySet 类型数据,不能为Book.objects.count()整型和models.Book.objects模型类的对象。
# values() 方法用于查询部分字段的数据。
# 不是模型类的对象,而是一个可迭代的字典序列, 字典 里的键是字段,值是数据。
# values_list() 方法用于查询部分字段的数据。
# 不是模型类的对象,而是一个个元组,元组 0.1里放的是查询字段对应的数据。
# distinct() 方法用于对数据进行去重# 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在
book = models.books.objects.filter(price__range=[100, 500]) # pk是主键primary key=3,==id=3
for i in book:
print(i.price)
print(book)
msg = '查询结果成功!!'
return render(request, 'home.html', {'msg': msg})
# 书籍的删除
def delete_book(request):
#books=models.Book.objects.all().delete() # 删除成功
# 方式一:使用模型类的
# 对象.delete()。
#books=models.Book.objects.filter(pk=8).first().delete()
# 返回值:元组,第一个元素为受影响的行数。
# 方式二:使用 QuerySet 类型数据.delete()(推荐)
# 返回值:元组,第一个元素为受影响的行数。
book = models.books.objects.filter(pk__in=[1, 2]).delete() # pk是主键primary key=3,==id=3
# for i in book:
# print(i.price)
print(book)
msg = '删除成功!!'
return render(request, 'home.html', {'msg': msg})
# 书籍的修改
def update_book(request):
# 方式一:
# 模型类的对象.属性 = 更改的属性值
# 模型类的对象.save()
# 方式二:QuerySet
# 类型数据.update(字段名=更改的数据)(推荐)
# 返回值:整数,受影响的行数
book = models.books.objects.filter(pk__in=[3,4]).update(price=167) # QuerySet 类型数据
# for i in book:
# print(i.price)
# book.price=145
# book.save()
print(book)
msg = '修改成功!!'
return render(request, 'home.html', {'msg': msg})
2.页面层
主页面home.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>不拘一格降人才</title>
</head>
<body>
<button><a href="{% url 'getform' %}">填空get表单</a></button><br>
<button><a href="{% url 'postform' %}">书籍页面</a></button>
<p>表单结果:{{ msg }}</p>
</body>
</html>
get请求页面getform.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>{{ a }}</p>
<p>{{ b.0 }}</p>
<form action="{% url 'getform' %}" method="get">
<input type="text" name="q">
<input type="submit" value="搜索">
</form>
<p>{{ msg }}</p>
</body>
</html>
书籍页面bookform.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>哈哈哈</title>
</head>
<body>
<div align="left">
<form action="{% url 'add_book' %}" method="post">
{% csrf_token %}
书名:<input type="text" name="title"><br>
价格:<input type="text" name="price"><br>
出版社名:<input type="text" name="publish"><br>
出版日期:<input type="date" name="pub_date"><br>
<input type="submit" value="添加书籍">
</form>
</div>
<button><a href="{% url 'home' %}">返回首页</a></button><br>
<button><a href="{% url 'search_book' %}">进行查询</a></button>
<button><a href="{% url 'delete_book' %}">进行删除</a></button>
<button><a href="{% url 'update_book' %}">进行修改</a></button>
</body>
</html>
3.模型层
models.py
from django.db import models
# Create your models here.
class books(models.Model):
id=models.AutoField(primary_key=True)#id 会自动导入,也可以手动设置
title=models.CharField(max_length=32)#书籍名称
price=models.DecimalField(max_digits=5,decimal_places=2)#价格
publish=models.CharField(max_length=32)#出版社名称
pub_date=models.DateField()#出版时间
4.路由设置
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('First.urls'))
]
"""djangoProject1 URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https:
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from First import views
urlpatterns = [
path('admin/', admin.site.urls),
path('tr/', views.tr, name='try'),
#首页
path('', views.home, name='home'),
#POST和GET表单
path('getform/', views.search, name='getform'),
path('postform/', views.searchpost, name='postform'),
#数据库BOOK操作
path('add_book/',views.add_book,name='add_book'),#增加
path('search_book/',views.search_book,name='search_book'),#查询
path('delete_book/',views.delete_book,name='delete_book'),#删除
path('update_book/',views.update_book,name='update_book')#修改
]
总结
总之今天是受益匪浅。。。
|