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 ]
View Code

2.中文本地化

技术分享图片
1 LANGUAGE_CODE = zh-hans
2 TIME_ZONE = Asia/Shanghai
3 USE_I18N = True
4 USE_L10N = True
5 USE_TZ = False
View Code

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 ]
View Code

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 }
View Code

5.工程同名子目录的__init__.py文件中添加如下语句:

技术分享图片
1 import pymysql
2 pymysql.install_as_MySQLdb()
View Code

6.static目录配置

技术分享图片
1 STATIC_URL = /static/
2 STATICFILES_DIRS = [
3 os.path.join(BASE_DIR, static)
4 ]
View Code

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 ]
View Code

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
View Code

七、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
View Code

 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()
数据查询get count all

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)
数据的查询 get filter exclude

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)
数据的查询 F对象

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))
数据的查询 Q对象

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)
数据的查询 order_by

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 模板作为片段

在选择的底部导航视图项目上重新创建片段

创建片段而不从 java 代码实例化它

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段