了解静态网站与动态网站


ORM 是什么
对象关系映射(Object Relational Mapping,ORM):是一种程序设计技术,用于实现面向对象编程语言 里不同类型系统的数据之间的转换。简单来说就是在编程语言中实现的一种虚拟对象数据库。我们对虚拟对象 数据库进行操作,它会转换成具体的SQL去操作数据库,这样一来我们就不需要学习复杂的SQL语句了。
ORM优势:不必熟悉复杂的SQL语句,容易上手,避免新手写SQL效率问题。

Model(模型类)
1、使用模型类定义一个User表,包含多字段
class User(models.Model): user = models.CharField(max_length=30) name = models.CharField(max_length=30) sex = models.CharField(max_length=10) age = models.IntegerField() label = models.CharField(max_length=100)
|
2、在settings.py配置文件中INSTALLED_APPS列表添加APP名称
INSTALLED_APPS = [ 'myapp', ]
|
3、将模型类生成具体的数据库表
python manage.py makemigrations
python mange.py migrate
|
4、进入数据库查看表
生成表名的默认格式:应用名_模型类名小写
使用MySQL数据库
1、使用docker启动一个mysql实例
docker run -d \ --name db \ -p 3306:3306 \ -v mysqldata:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7 --character-set-server=utf8
|
2、使用pip工具安装pymysql模块
3、修改django默认连接数据库
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '192.168.1.11', 'PORT': '3306', } }
|
4、指定数据库驱动
import pymysql pymysql.install_as_MySQLdb()
|
5、执行迁移文件生成表
ORM增删改查
增:
from myapp.models import User def user_add(request): User.objects.create( user='zhangsan', name='张三', sex='男', age='30', label="IT,讲师,老司机" ) return HttpResponse("用户添加成功!") 或者用save方法保存: obj = User( user=user, name=name, sex=sex, age=age, label=label ) obj.save()
|
查:
def user_list(request): user_list = User.objects.all() return render(request, "user.html", {'user_list': user_list})
User.objects.all()
User.objects.filter(user='amei')
User.objects.filter(age__gt=28) User.objects.get(id=2)
|
改:
User.objects.filter(user='amei').update(age=27,label='公关,漂亮,喜欢购物') 或者 obj = User.objects.get(user='amei') obj.age = 25 obj.save()
|
删:
User.objects.filter(id=3).delete() 或者 obj = User.objects.get(id=2) obj.delete()
|
Django内置管理后台
管理后台:一个网站一般都会开发一个后台系统,为管理员提供一种更简单的数据库操作方式。

1、访问URL
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
|
2、创建管理员账号
python manage.py createsuperuser
|
3、注册模型
from django.contrib import admin from myapp import models admin.site.register(models.User)
|
4、设置语言和时区
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
|

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。
以下是该常用属性:

示例:模型类Meta与方法使用
class User(models.Model): user = models.CharField(max_length=30) name = models.CharField(max_length=30) sex = models.CharField(max_length=30) age = models.IntegerField() label = models.CharField(max_length=100) class Meta: app_label = "myapp" db_table = "myapp_user" verbose_name = "用户表" verbose_name_plural = "用户表" ordering = ["sex"] def __str__(self): return self.name
|
模型类常用字段与选项


QuerySet对象序列化
序列化:将Python对象转为传输的数据格式,例如json
反序列化:将传输的数据格式转为Python对象
ORM查询返回的是QuerySet对象,如果你要提供数据接口,这显然是不行的。
有两种方法可以转为JSON字符串:
from django.core import serializers obj = User.objects.all() data = serializers.serialize('json', obj)
|
import json obj = User.objects.all() l = [] for i in obj: d = {} d['name'] = i.name d['user'] = i.user d['sex'] = i.sex d['age'] = i.age d['label'] = i.label l.append(d) json_data = json.dumps(l)
|