Django项目创建
Posted returnes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目创建相关的知识,希望对你有一定的参考价值。
一、创建项目
查看django命令:django-admin 即可显示django的可用命令
创建项目命令:django-admin startproject [项目名称] 若没有报错则创建项目成功
查看manage.py常用命令:python manage.py 即可显示manage中的可用命令
启动项目服务器命令:python manage.py runserver 启动服务器
启动项目服务器并修改端口:python manage.py runserver 9999 使用9999端口来启动服务器
二、创建应用
创建应用命令为:python manage.py startapp [项目名称]
创建完成后将应用名称添加到settings.py中的INSTALLED_APPS中完成应用的创建
三、数据迁移
models模型创建完毕后使用manage.py来生成数据表,models模型创建需要在应用目录中的models.py中进行创建
创建数据迁移命令:python manage.py makemigrations [应用名称] 进行数据迁移的准备步骤,输入以下命令完成数据迁移操作
开始数据迁移命令:python manage.py migrate
注:如果不输入应用名称则默认对django中的所有应用进行数据迁移操作
数据迁移完成后使用以下命令进行SQL语句查询
命令为:python manage.py sqlmigrate [应用名称] [文件id]
四、创建超级用户
命令为:python manage.py createsuperuser
浏览器中访问:localhost:8000/admin 进行访问admin页面
在应用下admin.py中引入自身的models模块,使用
编辑admin.py添加代码:admin.site.register(models.Article)
将admin管理后台进行配置升级
创建admin配置类
class ArticleAdmin(admin.ModelAdmin) pass admin.site.register(Article,ArticleAdmin )
五、配置文件setting
1.添加app
1 INSTALLED_APPS = [ 2 ‘django.contrib.admin‘, 3 ‘django.contrib.auth‘, 4 ‘django.contrib.contenttypes‘, 5 ‘django.contrib.sessions‘, 6 ‘django.contrib.messages‘, 7 ‘django.contrib.staticfiles‘, 8 #添加子应用 9 ‘book.apps.BookConfig‘ 10 ]
2.中文本地化
1 LANGUAGE_CODE = ‘zh-hans‘ 2 TIME_ZONE = ‘Asia/Shanghai‘ 3 USE_I18N = True 4 USE_L10N = True 5 USE_TZ = False
3.模板路径配置
1 TEMPLATES = [ 2 { 3 ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, 4 ‘DIRS‘: [os.path.join(BASE_DIR,‘templates‘)], 5 ‘APP_DIRS‘: True, 6 ‘OPTIONS‘: { 7 ‘context_processors‘: [ 8 ‘django.template.context_processors.debug‘, 9 ‘django.template.context_processors.request‘, 10 ‘django.contrib.auth.context_processors.auth‘, 11 ‘django.contrib.messages.context_processors.messages‘, 12 ], 13 }, 14 }, 15 ]
4.mysql数据库配置
1 DATABASES = { 2 ‘default‘: { 3 ‘ENGINE‘: ‘django.db.backends.mysql‘, 4 ‘NAME‘: ‘djangotest‘, 5 ‘USER‘: ‘root‘, 6 ‘PASSWORD‘: ‘000000‘, 7 ‘HOST‘: ‘127.0.0.1‘, 8 ‘PORT’:3306 9 } 10 }
5.工程同名子目录的__init__.py文件中添加如下语句:
1 import pymysql 2 pymysql.install_as_MySQLdb()
6.static目录配置
1 STATIC_URL = ‘/static/‘ 2 STATICFILES_DIRS = [ 3 os.path.join(BASE_DIR, ‘static‘) 4 ]
7.指定url配置
ROOT_URLCONF = ‘项目.urls‘
六、路由分发
1.项目路由
1 from django.conf.urls import url, include 2 from django.contrib import admin 3 4 urlpatterns = [ 5 url(r‘^admin/‘, admin.site.urls), 6 url(r‘^book/‘,include(‘book.urls‘,namespace=‘book‘)) 7 ]
2.应用子路由
1 from django.conf.urls import url 2 from book import views 3 4 urlpatterns=[ 5 url(r‘^index/$‘,views.index,name=‘index‘) 6 ] 7 app_name=‘book‘
七、models模型创建
1.示例代码
1 from django.db import models 2 3 # Create your models here. 4 # 准备书籍列表信息的模型类 5 class BookInfo(models.Model): 6 # 创建字段,字段类型... 7 name = models.CharField(max_length=20, verbose_name=‘名称‘) 8 pub_date = models.DateField(verbose_name=‘发布日期‘,null=True) 9 readcount = models.IntegerField(default=0, verbose_name=‘阅读量‘) 10 commentcount = models.IntegerField(default=0, verbose_name=‘评论量‘) 11 is_delete = models.BooleanField(default=False, verbose_name=‘逻辑删除‘) 12 13 class Meta: 14 db_table = ‘bookinfo‘ # 指明数据库表名 15 verbose_name = ‘图书‘ # 在admin站点中显示的名称 16 17 def __str__(self): 18 """定义每个数据对象的显示信息""" 19 return self.name 20 21 # 准备人物列表信息的模型类 22 class PeopleInfo(models.Model): 23 GENDER_CHOICES = ( 24 (0, ‘male‘), 25 (1, ‘female‘) 26 ) 27 name = models.CharField(max_length=20, verbose_name=‘名称‘) 28 gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name=‘性别‘) 29 description = models.CharField(max_length=200, null=True, verbose_name=‘描述信息‘) 30 book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name=‘图书‘) # 外键 31 is_delete = models.BooleanField(default=False, verbose_name=‘逻辑删除‘) 32 33 class Meta: 34 db_table = ‘peopleinfo‘ 35 verbose_name = ‘人物信息‘ 36 37 def __str__(self): 38 return self.name
2.字段类型
类型 | 说明 |
---|---|
AutoField | 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 |
BooleanField | 布尔字段,值为True或False |
NullBooleanField | 支持Null、True、False三种值 |
CharField | 字符串,参数max_length表示最大字符个数 |
TextField | 大文本字段,一般超过4000个字符时使用 |
IntegerField | 整数 |
DecimalField | 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数 |
FloatField | 浮点数 |
DateField | 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 |
TimeField | 时间,参数同DateField |
DateTimeField | 日期时间,参数同DateField |
FileField | 上传文件字段 |
ImageField | 继承于FileField,对上传的内容进行校验,确保是有效的图片 |
3.选项
选项 | 说明 |
---|---|
null | 如果为True,表示允许为空,默认值是False |
blank | 如果为True,则该字段允许为空白,默认值是False |
db_column | 字段的名称,如果未指定,则使用属性的名称 |
db_index | 若值为True, 则在表中会为此字段创建索引,默认值是False |
default | 默认 |
primary_key | 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 |
unique | 如果为True, 这个字段在表中必须有唯一值,默认值是False |
null是数据库范畴的概念,blank是表单验证范畴的
4.外键
在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:
-
CASCADE级联,删除主表数据时连通一起删除外键表中数据
-
PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
-
SET_NULL设置为NULL,仅在该字段null=True允许为null时可用
-
SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用
-
SET()设置为特定值或者调用特定方法
-
DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常
八、shell工具和查看MySQL数据库日志
1.通过如下命令进入shell
python manage.py shell
2.查看MySQL数据库日志取消注释
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
general_log_file=/var/log/mysql/mysql.log
general_log=1
3.重启mysql服务
sudo service mysql restart
4.使用如下命令打开mysql日志文件
tail -f /var/log/mysql/mysql.log # 可以实时查看数据库的日志内容
# 如提示需要sudo权限,执行
# sudo tail -f /var/log/mysql/mysql.log
九、数据库操作示例代码
1.增加
1 ######################数据的增加################################### 2 3 from book.models import BookInfo 4 5 book = BookInfo( 6 name=‘python‘, 7 pub_date=‘2000-1-1‘ 8 ) 9 # 第一种 添加数据的方式 需要手动调用 save方法 10 book.save() 11 12 13 #第二种方式;数据直接入库 14 BookInfo.objects.create( 15 name=‘java‘, 16 readcount=100 17 )
2.更新
1 ######################数据的更新################################### 2 3 book = BookInfo.objects.get(id=5) 4 5 book.readcount=1000 6 book.commentcount=2000 7 # 需要调用 save方法 8 book.save() 9 10 11 # 第二种 更新数据的方法 12 # filter().update() 13 BookInfo.objects.filter(id=6).update(pub_date=‘2008-8-8‘,commentcount=222)
3.删除
1 ######################数据的删除################################### 2 3 book = BookInfo.objects.get(id=6) 4 5 book.delete() 6 7 8 # 第二种方式 9 BookInfo.objects.get(id=5).delete() 10 BookInfo.objects.filter(id=5).delete()
4.数据的查询 get count all
1 ######################数据的查询 get count all################################## 2 3 """ 4 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。 5 6 all查询多个结果。 7 8 count查询结果数量 9 """ 10 11 BookInfo.objects.get(id=1) 12 13 # book.models.DoesNotExist: 14 book = BookInfo.objects.get(id=10) 15 16 # try: 17 # book = BookInfo.objects.get(id=10) 18 # except BookInfo.DoesNotExist: 19 # pass 20 # 21 # if not book: 22 # pass 23 24 BookInfo.objects.all() 25 26 BookInfo.objects.count() 27 BookInfo.objects.all().count()
5.数据的查询 get filter exclude
1 ######################数据的查询 get filter exclude ################################## 2 """ 3 filter过滤出多个结果 (0,1,n 多个结果) 4 exclude排除掉符合条件剩下的结果 5 get过滤单一结果 6 7 三个语句的语法形式是一样的. 我们以 filter为例: 8 filter(字段名__运算符=值) 9 10 11 """ 12 # 查询编号为1的图书 13 BookInfo.objects.get(id=1) #简写形式 14 BookInfo.objects.get(id__exact=1) 15 16 BookInfo.objects.filter(id__exact=1) 17 # 查询书名包含‘湖‘的图书 18 BookInfo.objects.filter(name__contains=‘湖‘) 19 20 # 查询书名以‘部‘结尾的图书 21 BookInfo.objects.filter(name__endswith=‘部‘) 22 # 查询书名为空的图书 23 BookInfo.objects.filter(name__isnull=True) 24 25 # 查询编号为1或3或5的图书 26 BookInfo.objects.filter(id__in=[1,3,5]) 27 28 # 查询编号大于3的图书 29 # 大于 : gt 30 # 大于等于 : gte 31 # 小于: lt 32 # 小于等于: lte 33 BookInfo.objects.filter(id__gt=3) 34 35 # 查询编号不等于3的图书 36 BookInfo.objects.exclude(id=3) 37 38 39 # 查询1980年发表的图书 40 BookInfo.objects.filter(pub_date__year=‘1980‘) 41 42 # 查询1990年1月1日后发表的图书 43 BookInfo.objects.filter(pub_date__gt=‘1990-1-1‘)
6.数据的查询 F对象
1 ######################数据的查询 F对象 ################################## 2 """ 3 两个属性比较 4 filter(字段名__运算符=F(‘字段名‘)) 5 """ 6 from django.db.models import F 7 8 9 # 评论量大于阅读量 10 11 BookInfo.objects.filter(commentcount__gt=F(‘readcount‘)) 12 13 14 15 16 # 评论量大于阅读量2倍的书籍 17 BookInfo.objects.filter(commentcount__gt=F(‘readcount‘)*2)
7.数据的查询 Q对象
1 ######################数据的查询 Q对象 ################################## 2 3 4 # 查询一下 id大于2 并且 阅读量大于30的书籍 5 #第一种方式 6 BookInfo.objects.filter(id__gt=2).filter(readcount__gt=30) 7 8 # 第二种方式 9 BookInfo.objects.filter(id__gt=2,readcount__gt=30) 10 11 12 ## 查询一下 id大于2 or 阅读量大于30的书籍 13 14 """ 15 Q对象 16 Q(字段名__运算符=值)|Q(字段名__运算符=值) | 表示:或者 17 Q(字段名__运算符=值)&Q(字段名__运算符=值) & 表示:and 18 19 ~Q() 相当于 not exclude 20 21 """ 22 23 from django.db.models import Q 24 25 BookInfo.objects.filter(Q(id__gt=2)|Q(readcount__gt=30)) 26 27 28 # 查询编号不等于3的图书 29 BookInfo.objects.exclude(id=3) 30 31 BookInfo.objects.filter(~Q(id=3))
8.数据的查询 聚合函数
1 ######################数据的查询 聚合函数 ################################## 2 3 """ 4 Max,Min,Count,Avg,Sum 聚合函数 5 6 聚合函数使用语法: 7 objects.aggregate(Xxx(‘字段名‘)) 8 """ 9 10 # 统计一下 总的 阅读量 11 from django.db.models import Sum,Max,Min,Avg,Count 12 BookInfo.objects.aggregate(Sum(‘readcount‘))
9.数据的查询 order_by
1 ######################数据的查询 order_by ################################## 2 3 #默认是升序 4 BookInfo.objects.all().order_by(‘readcount‘) 5 6 #降序 7 BookInfo.objects.all().order_by(‘-readcount‘)
10.数据的查询 关联查询
1 ######################数据的查询 关联查询 ################################## 2 """ 3 1:n中 4 如果我们根据1的数据 ,获取 多的 关联信息 5 django自动为我们添加另一个字段: 6 关联模型类名小写_set 7 8 """ 9 # 查询书籍为1的所有人物信息 10 # 1. 查询书籍 11 book = BookInfo.objects.get(id=1) 12 13 book.peopleinfo_set.all() 14 15 16 # 查询人物为1的书籍信息 17 from book.models import PeopleInfo 18 person = PeopleInfo.objects.get(id=1) 19 20 person.book 21 22 person.book.readcount
11.数据的查询 关联查询的筛选
1 ######################数据的查询 关联查询的筛选 ################################## 2 3 4 5 """ 6 1 :n中 7 如果我们根据1的数据 ,n的条件来进行查询的时候 8 语法形式为: 9 以filter为例: 10 filter(关联模型类名小写__字段名__运算符=值) 11 12 """ 13 14 # 查询图书,要求图书人物为"郭靖" 15 BookInfo.objects.filter(peopleinfo__name__exact=‘郭靖‘) 16 BookInfo.objects.filter(peopleinfo__name=‘郭靖‘) 17 # 查询图书,要求图书中人物的描述包含"八" 18 BookInfo.objects.filter(peopleinfo__description__contains=‘八‘) 19 20 21 22 """ 23 1 :n中 24 如果我们根据n的数据 ,1的条件来进行查询的时候 25 语法形式为: 26 以filter为例: 27 filter(外键属性__字段名__运算符=值) 28 """ 29 30 # 查询书名为“天龙八部”的所有人物 31 PeopleInfo.objects.filter(book__name__exact=‘天龙八部‘) 32 PeopleInfo.objects.filter(book__name=‘天龙八部‘) 33 34 # 查询图书阅读量大于30的所有人物 35 36 PeopleInfo.objects.filter(book__readcount__gt=30) 37 38 39 """ 40 41 惰性: 使用的时候才执行 42 缓存: 43 暂时理解为: 将硬盘的数据 缓存到 内存中 44 45 硬盘数据: 容量大, 读取速度慢, 断电有保存 46 内存数据: 容量小,接近CPU,读取速度快, 断电就失去 47 48 """
12.数据查询 限制查询结果集
1 ######################数据的查询 限制查询结果集 ################################## 2 3 BookInfo.objects.all()[0:2]
以上是关于Django项目创建的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django Summernote 中显示编程片段的代码块?
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段