模板网站制作时间,小程序定制开发外包风险,wordpress自动推荐插件,空间一个数据库可以做几个网站文章目录 一、基本了解二、ORM基本操作2.1 连接数据库2.1.1 使用sqlite数据库2.1.2 使用MySQL数据库 2.2 对数据库操作2.2.1 增#xff08;前端数据——数据库#xff09;2.2.2 查#xff08;数据库——前端展示#xff09;2.2.3 改#xff08;修改数据#xff0… 文章目录 一、基本了解二、ORM基本操作2.1 连接数据库2.1.1 使用sqlite数据库2.1.2 使用MySQL数据库 2.2 对数据库操作2.2.1 增前端数据——数据库2.2.2 查数据库——前端展示2.2.3 改修改数据2.2.3 删删除数据 三、配置管理后台3.1 登陆后台3.2 创建用户3.3 注册模型3.4 设置语言和时区 四、模型类4.1 模型Meta类与方法4.2 常用字段字段选项4.3 QuerySet序列化 一、基本了解 静态网站动态网站 静态网站是从本地读取数据完全由html模板提供的静态数据。动态网站是从数据库读取数据由动态网页中包含的程序输出结果。 ORM作用 动态网站中的数据是从数据库中返回的在django就是由ORM中间程序对数据库进行操作把常规的SQL语句转化成独有的语法继而拿到数据并返回给浏览器。 ORM概念 对象关系映射Object Relational MappingORM是一种程序设计技术用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单来说就是在编程语言中实现的一种虚拟对象数据库。我们对虚拟对象数据库进行操作它会转换成具体的SQL去操作数据库这样一来我们就不需要学习复杂的SQL语句了。 ORM优势 ORM优势就是不必熟悉复杂的SQL语句容易上手避免新手写SQL效率问题。 Django默认创建的数据库表。 表名作用auth_user用户表auth_user_groups用户所属组的表auth_user_user_permissions用户权限表auth_group用户组表auth_group_permissions用户组权限表auth_permission存放全部权限的表其他的表的权限都是从此表中外键连接过去的django_session保存HTTP状态django_migrations数据库迁移记录
二、ORM基本操作
2.1 连接数据库
2.1.1 使用sqlite数据库 Django默认使用的数据库是sqlite3一般用于数据测试生产环境还是建议使用mysql或oracle。sqlite数据库是一个文件级别的数据库所有数据都存放在一个文件中。 1.定义数据库表在app/models.py文件中定义。
from django.db import models##定义一个模型类自定义类名称User
class User(models.Model):user models.CharField(max_length30) #用户名name models.CharField(max_length30) #姓名sex models.CharField(max_length10) #性别age models.IntegerField() #年龄label models.CharField(max_length100) #标签2.在settings.py配置文件中INSTALLED_APPS列表添加APP名称。
##创建一个app名为myapp
python manage.py startapp myapp3.将模型类生成具体的数据库表。
##生成迁移文件 是一个更偏向sql语句的执行文件文件位置在myapp\migrations\0001_initial.py。
python manage.py makemigrations##执行迁移文件生成表。
python manage.py migrate4.进入数据库查看表。生成表名的默认格式应用名_模型类名小写。
2.1.2 使用MySQL数据库
1.使用docker启动一个mysql实例模拟生产环境中的mysql数据库。
docker run -d \
--name qingjun \
-p 3306:3306 \
-v mysqldata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD123456 \
mysql:5.7 --character-set-serverutf82.使用pip工具安装pymysql模块。
pip install pymysql3.修改django默认连接数据库。
##修改文件devops/settings.py
DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: test,USER: root,PASSWORD: 123456,HOST: 192.168.161.132,PORT: 3306,}
}4.指定数据库驱动。
##操作文件myapp/__init__.py添加以下内容。
import pymysql
pymysql.install_as_MySQLdb()5.执行迁移文件生成表。
python manage.py migrate6.mysql数据库查看表。
2.2 对数据库操作
2.2.1 增前端数据——数据库
1.代码示例。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns [path(admin/, admin.site.urls),path(myapp/,include(myapp.urls))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns [path(user_add,views.user_add)
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def user_add(request):##向数据库插入一条数据。User.objects.create(userqingjun,name卿君,sex男,age35,labelIT,讲师,热爱健身)return render(request, user_add.html)#######################################################
4、操作文件templates/user_add.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title新用户注册/title
/head
body
form action methodposth1注册用户/h1用户名 : input typetext nameuserbr姓名 : input typetext namenamebr性别 : input typetext namesexbr年龄 : input typetext nameagebr标签 : input typetext namelabelbrbutton typesubmit提交/button
/form
/body
/html2.浏览器访问http://127.0.0.1:8000/myapp/user_add访问一次就执行一遍视图函数就往数据库写一遍数据。 3.查看数据库表数据。 4.修改视图函数代码变成在网页表单中填入信息可以提交到数据库。
#######################################################
##操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def user_add(request):if request.method GET:return render(request, user_add.html)elif request.method POST:#获取前端表单提交的数据user request.POST.get(user)name request.POST.get(name)sex request.POST.get(sex)age request.POST.get(age)label request.POST.get(label)try:User.objects.create( ##方式一写法。useruser,namename,sexsex,ageage,labellabel)obj User( ##方式二写法。useruser,namename,sexsex,ageage,labellabel)msg 用户添加成功code 0except:msg 用户添加失败请检查code 1return render(request, user_add.html,{msg: msg, code: code})#######################################################
##操作文件templates/user_add.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title新用户注册/title
/head
body
form action methodposth1注册用户/h1用户名 : input typetext nameuserbr姓名 : input typetext namenamebr性别 : input typetext namesexbr年龄 : input typetext nameagebr标签 : input typetext namelabelbrbutton typesubmit提交/button{% if code 0 %}p stylecolor:blue;{{ msg }}/p{% elif code 1 %}p stylecolor: red{{ msg }}/p{% endif %}
/form
/body
/html5.前端提交表单数据到数据库。
2.2.2 查数据库——前端展示
1.示例代码。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns [path(admin/, admin.site.urls),path(myapp/,include(myapp.urls))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns [path(user_add,views.user_add),path(user_list,views.user_list) ##添加此行。
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def user_list(request):user_list User.objects.all()return render(request, user_list.html, {user_list: user_list})#######################################################
4、操作文件templates/user_list.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title数据查询/title
/head
body
table border1theadtrth用户名/thth姓名/thth性别/thth年龄/thth标签/th/tr/theadtbody{% for i in user_list %}trtd{{ i.user }}/tdtd{{ i.name }}/tdtd{{ i.sex }}/tdtd{{ i.age }}/tdtd{{ i.label }}/td/tr{% endfor %}/tbody
/body
/html2.访问网页查询数据库数据。 3.其他查询语句。
from myapp.models import UserUser.objects.all() # 获取所有记录
User.objects.filter(userqingjun) # 加条件获取记录例如字段是多少
User.objects.filter(age__gt20) # 加条件获取记录例如年龄大于多少
User.objects.get(id2) # 获取单条记录id是唯一2.2.3 改修改数据 修改id2的数据。 1.修改之前。 2.修改之后。
##方式一。
User.objects.filter(id2).update(userbaimu,name柏木,sex女,label公关,漂亮,喜欢购物)##方式二。
obj User.objects.get(id2)
obj.age 25
obj.save()2.2.3 删删除数据
1.删除id3的数据。
##方式一。
User.objects.filter(id3).delete()##方式二。
obj User.objects.get(id2)
obj.delete()2.查看数据。
三、配置管理后台 管理后台一个网站一般都会开发一个后台系统为管理员提供一种更简单的数据库操作方式不然每次修改数据都需要输入代码修改。 3.1 登陆后台
1.访问Django后台管理页面。
from django.contrib import admin # 内建管理后台功能
from django.urls import path
urlpatterns [path(admin/, admin.site.urls), # 内建管理后台访问地址
]2.创建管理员账号。
python manage.py createsuperuser3.登录后台管理系统。
3.2 创建用户
1.创建新用户并授权登录。 2.新用户登录。 3.3 注册模型
1.注册模型让数据库的数据显示到后台管理系统中。
##修改文件myapp/admin.py
from django.contrib import admin
from myapp import models
admin.site.register(models.User)2.可以直接修改数据库数据。
3.4 设置语言和时区
1.修改django配置文件。
LANGUAGE_CODE zh-hans
TIME_ZONE Asia/Shanghai
USE_I18N True
USE_L10N True
USE_TZ False2.查看效果。
四、模型类
4.1 模型Meta类与方法 Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。 常用属性选项描述app_label指定APP名称当模型类不在默认的APP的models.py文件中这时需要指定模型类是属于哪个APP。db_table指定生成的数据库表名称默认是”应用名_模型名”ordering对象的默认顺序值是一个列表或元组。元素是一个字符串表示字段名元素前面带减号表示倒序没有表示升序问号表示随机排序例如ordering [“-sex”]verbose_name定义一个易读的模型名称默认会加一个复数sverbose_name_plural定义一个易读的模型名称不带复数s
1.verbose_name用法优化前端模型名称显示为英文问题。
##myapp/models.py文件添加class User(models.Model):......##添加以下代码。class Meta:app_label myapp ##模型类标签。db_table myapp_user #自定义生成的数据库表名verbose_name用户表 #前端显示为用户表verbose_name_plural用户表 #优化前端显示问题去掉复数形式2.优化用户表名显示成python对象问题。
##myapp/models.py文件添加
class User(models.Model):......class Meta:......##添加以下代码。ordering [user] # 对象的默认顺序用于获取对象列表时def __str__(self):return self.user # 返回字段值4.2 常用字段字段选项
字段类型描述AutoField(**options)ID自动递增会自动添加到模型中BooleanField(**options)布尔值字段true/false默认值是NoneCharField(max_lengthNone[,**options])存储各种长度的字符串EmailField([max_length254,**options])邮件地址会检查是否合法FileField([upload_toNone,max_length100,**options])保存上传文件。upload_to是保存本地的目录路径FloatField([**options])浮点数IntegerField([**options])整数GenericIPAddressField(protocol’both’, unpack_ipv4False, **options)IP地址TextField([**options])大文本字符串URLField([max_length200,**options])字符串类型的URLDateTimeField([auto_nowFalse,auto_now_addFalse,**options])日期和时间1、auto_nowTrue时第二次保存对象时自动设置为当前时间。用于最后一次修改的时间戳比如更新。2、auto_now_addTrue时第一次创建时自动设置当前时间。用于创建时间的时间戳比如新增。这两个参数互斥不能写到一个字段里分开定义字段用。DateField([auto_nowFalse,auto_now_addFalse,**options])日期TimeField([auto_nowFalse,auto_now_addFalse,**options])时间
字段选项描述null如果为True字段用NULL当做空值默认Falseblank如果为True允许为空默认Falsedb_index如果为True为此字段建立索引default字段的默认值primary_key如果为True设置为主键unique如果为True保持这个字段的值唯一verbose_name易读的名称管理后台会以这个名称显示 添加时间日期。 1.给数据库表添加时间日志字段。
##myapp/models.py文件添加
class User(models.Model):......create_datetime models.DateTimeField(auto_now_addTrue, blankTrue, nullTrue) ##第一次创建时间update_datetime models.DateTimeField(auto_nowTrue, blankTrue, nullTrue) ##更新时间##生成迁移文件并同步该文件。
python manage.py makemigrations
python manage.py migrate2.verbose_name用法优化显示前端用户名称。
4.3 QuerySet序列化 序列化将Python对象转为传输的数据格式. 反序列化将传输的数据格式转为Python对象 ORM查询返回的是QuerySet对象有两种方法可以转为JSON字符串 使用内建函数 serializers遍历QuerySet对象将字段拼接成字典再通过json库编码 1.使用函数serializers转换为JSON格式。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns [path(admin/, admin.site.urls),path(myapp/,include(myapp.urls))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns [path(api,views.api)
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def api(request):from django.core import serializersobj User.objects.all()data serializers.serialize(json, obj)return HttpResponse(data)2.配合json库遍历查询优势是可以自定义返回内容。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns [path(admin/, admin.site.urls),path(myapp/,include(myapp.urls))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns [path(api,views.api)
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def api(request):import jsonobj User.objects.all() ##返回的是pathon的QuerySet对象。l [] ##[{},{}] ##是一个列表里面包含多个字典。for i in obj:d {}d[name] i.named[user] i.userd[label] i.labell.append(d)json_data json.dumps(l)return HttpResponse(json_data)