创建一个项目
django-admin startproject mysite
查看项目是否创建成功(网站)
python manage,py runserver
创建一个app
python manage.py startapp polls
创建一个视图
在 `polls/views.py文件下输入代码
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello")
在polls文件下创建一个新的urls.py文件,在polls/urls.py文件里输入代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
在mysite/polls.urls中插入一个include()
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
检验是否正常工作
python manage.py runserver
浏览器网址:后面加上polls
链接数据库(mysql)
配置default数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER': 'root',
'PASSWORD': '数据库密码',
'HOST': '127.0.0.1',
}
}
创建模型(购物)
class Types(models.Model):
id = models.AutoField(primary_key=True)
firsts = models.CharField('一级类型',max_length=100)
seconds = models.CharField('二级类型',max_length=100)
def __str__(self):
return str(self.id)
class Meta:
verbose_name='商品类型'
verbose_name_plural = '商品类型'
class CommodityInfos(models.Model):
id = models.AutoField(primary_key = True)
name = models.CharField('商品名称',max_length=100)
sezes = models.CharField('商品规格',max_length=100)
types = models.CharField('商品类型',max_length=100)
price = models.FloatField('商品价格')
discount = models.FloatField('折后价格')
stock = models.IntegerField('存货数量')
sold = models.IntegerField('已售数量')
likes = models.IntegerField('收藏数量')
created = models.DateField('上架日期',auto_now_add=True)
img = models.FileField('商品主图',upload_to=r'imgs')
details = models.FileField('商品介绍',upload_to=r'details')
def __str__(self):
return str(self.id)
class Meta:
verbose_name ='商品信息'
verbose_name_plural='商品信息'
激活模型
在mysite/settings.py
中 INSTALLED_APPS
子项添加点式路径后,它看起来像这样:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
]
现在Django会出现polls应用接着运行
python manage.py makemigrations polls
#运行结果
Migrations for 'polls':
polls\migrations\0001_initial.py
- Create model CommodityInfos
- Create model Types
在数据库中创建表
python manage.py migrate
进入API
进入django的shell模式
python manage.py shell
引用类方法(类名)
from polls.models import Types, CommodityInfos
查看所有命令
In [12]: Types.objects.all()
Out[12]: <QuerySet [<Types: 1>]>
添加操作
方法一:
t = Types()
t.firsts='女装'
t.seconds='男装'
t.save()
方法二:
#创建
In [20]: t=Types.objects.create(firsts='儿童用品',seconds='婴儿车')
#获取新增的数据id
In [21]: t.id
方法三
In [22]: t=Types(firsts='儿童用品',seconds='婴儿车')
In [23]: t.save()
#查询数据,没有就添加一条
In [25]: d = dict(firsts='儿童教育',seconds='通话书籍')
In [26]: t = Types.objects.get_or_create(**d)
In [27]: print(t)
(<Types: 4>, True)
说明新加了一条数据
再次运行出现
(<Types: 4>, False)
说明改数据已经存在了
#如果数据存在就修改,如果数据不存在就添加,注意如果有多条数据符合条件将报错
d=dict(firsts='儿童教育',seconds='通话书籍')
In [6]: t = Types.objects.update_or_create(**d,defaults={'firsts':'儿童教育'})
批量添加操作
In [7]: d1 = Types(firsts = '儿童教育',seconds = '童话书籍')
In [8]: d2 = Types(firsts = '儿童影视',seconds = '童话动画')
In [9]: obj_list = [d1,d2]
In [10]: t = Types.objects.bulk_create(obj_list)
#注意d1 d2的写法,是传参数的类
数据更新操作
#方法一
In [11]: t = Types.objects.get(id=1)
In [12]: t.firsts = '儿童用品'
In [13]: t.save
#方法二
t = Types.objects.filter(id=1).update(seconds='天天')
#也可以写成
d = dict(seconds='男装')
t = Types.objects.filter(id=1).update(**d)
#如果不加入filter作为限制项,则修改针对所有数据
#如果将某数据在原基础上加10这里则需要 F
In [25]: from django.db.models import F
In [26]: from django.db.models import *
In [27]: t = Types.objects.filter(id=1)
In [28]: t.update(id=F('id')+10)
这里是让ID为1的数据的id加10
删除数据
删除全部数据
Types.objects.all().delete()
#删除一条数据
Types.objects.get(id=2).delete()
#删除多条数据
Types.objects.filter(firsts='儿童用品').delete()
如果删除的数据有其它表关联,则根据建表时外键字段的on_delete的不同有不同的
比如**on_delete = models.CASCADE**则删除了一条信息,与之关联的信息会被直接删除
PROTECT模式 删除有关联的数据直接提示数据删除失败
SET_NULL模式 将关联被删除数据的数据外键设为null,建表时必须允许外键为null才可以否则爆炸
SET_DEFAULT模式 将被删除的外键字段改为设置好的默认值
SET模式 将关联数据被删除的数据的外键关联到其他的数据
DO_NOTHING模式 不做任何处理,删除结果由数据库的删除看模式决定