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.cnfgeneral_log_file=/var/log/mysql/mysql.loggeneral_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]

数据的查询 限制查询结果集

原文地址:https://www.cnblogs.com/returnes/p/10199712.html

时间: 2024-11-09 20:42:13

Django项目创建的相关文章

django项目创建和结构解释

一.django项目创建 1.手动创建 1)查看是否安装了Django 没有安装的话可以用install命令安装. 2)创建Django项目 3)查看创建的项目 4)创建应用 Django中至少需要一个应用app,用来处理业务逻辑. 2.利用pycharm创建项目 二.Django结构解释 1.项目结构解释 第一层demo就是创建的整个Django项目. 第二层demo是项目的主程序目录. manage.py是整个项目的主控制文件. settings.py是整个项目的设置文件. urls.py是

Django 项目创建 和 应用创建

Django 项目创建 和 应用创建 创建一个Django项目 命令行: 1. 进入用于存放项目的目录下 2. 在项目目录下执行命令:django-admin startproject mysite # 这里mysite就是项目名 3. 项目创建完成会生成项目目录mysite 启动django开发server django开发server是一个轻量级Web server,纯python代码写的.前提已经说了这是一个轻量级的开发服务,不用于生产web服务器中,如apache.django只是一个w

后台:Django项目创建

后台:Django项目创建 环境 """ 为luffy项目创建一个虚拟环境 >: mkvirtualenv luffy """ """ 按照基础环境依赖 >: pip install django==2.0.7 >: pip install djangorestframework >: pip install pymysql """ 创建项目 "&quo

python django项目创建

1.安装django pip3 install django 2.创建项目 a.进入指定的目录创建项目. C:\Python3.5\Scripts\django-admin.exe startproject mysite b.创建app cd mysite python3 manage.py startapp cmdb 创建完成目录结构. mysite   - mysite (配置文件)         - urls.py 路由系统         - setting.py 所有的配置文件   

对Django 项目创建之后产生的目录文件的认识

在新建一个Django项目之后,里面会默认创建四个文件: __init__.py manage.py settings.py urls.py 下面解释这些文件的作用: __init__.py Django项目是Python包,这个文件是用来告诉Python这个文件夹当做一个包.在Python术语中,包是一组模块的集合,主要用来把相似的文件分组,防止出现命名冲突. manage.py 这是另外一个有用的脚步用来管理你的项目,你可以把它看做是你项目的的django-admin.py版本,其实,man

Django 项目创建方法

以下为创建django创建方法步骤: 一.安装django模块 pip3 install Django 二.创建django项目 (1)通过命令方式创建 django-admin startproject mystie (2)通过pycharm创建 新建django项目 三.文件说明 1.setting.py 配置文件 2.urls.py 路由系统 3.wsgi.py 4.manage.py 启动文件 四.创建app(其中一个项目的名字,例如cmdb) python3 manage.py sta

windows 下虚拟环境工具下django 项目创建

1.首先切换到之前安装的 虚拟环境工具 目录输入activate 激活脚本,接着进入python交互式行命令,导入django 模块,查看版本信息,退出exit(). G:\djangosite\env_mydjangosite\Scripts>activate (env_mydjangosite) G:\djangosite\env_mydjangosite\Scripts>pythonPython 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40)

为django项目创建虚拟环境

1. 先创建一个存放虚拟环境的目录  /opt/venl mkdir /opt/venl 2. cd 到该存放虚拟环境的目录下,并创建一个虚拟环境 virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境 cd /opt/ve

django 项目创建使用

1. web框架的本质: socket服务端 与 浏览器的通信 2. socket服务端功能划分: a. 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... b. 根据用户访问不同的路径执行不同的函数 c. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言) 3. Python中 Web框架的分类: 1. 按上面三个功能划分: 1. 框架自带a,b,c --> Tornado 2. 框架自带b和c,使用第三方的a