Django创建项目的基本流程 虚拟环境的创建 setting中的相关匹配置 媒体静态文件的配置以及数据库与模型的配置

Django创建项目的基本流程

  1. 虚拟环境

    • 安装virtualenv
pip install  virtualenv
  • 创建虚拟环境
virtualenv --no-site-package venv
  • 进入/退出env
进入 cd env/Scripts/文件夹  输入activate命令

退出 输入deactivate

在python项目中我们需要选定在哪一个环境下运行项目。

  1. 创建项目的基本流程

    • 创建Django项目
      1. 执行django-admin startproject <name> ,其中是想创建项目的名称。
    • 创建Django应用
      1. 执行django-admin startapp <appname>,其中APPname是想创建应用的名称。
      2. 把应用添加到项目配置目录中settings.py文件里,放到INSTALLED-APPS列表的的末尾,告诉Django项目存在这个应用。
      3. 在项目的urls.py文件中添加一个映射,指向新建的应用。
      4. 在应用的目录中新建urls.py文件,将入站URL与视图对应起来。
      5. 在应用的views.py文件中编写所需的视图,确保返回一个HTTPResponse对象。
  2. 模板与媒体、静态文件的使用

    • #### 配置模板目录

在 Django 项目配置目录目录。注意,这个目录要与项目的manage.py

脚本放在同一级。

在setting.py 文件中TEMPLATES有默认内容如下:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
             ],
          },
    },
]

内容中的DIRS为templates目录的路径,这里需要用动态路径,

settings.py 文件的顶部有个名为 BASE_DIR的变量,它的值是 settings.py 文件所在目录的路径。这里用到了 Python 的特殊属性 file,它的值是所在文件的绝对路径。调用 os.path.dirname() 的作用是获取 settings.py 文件所在目录的绝对路径,再调用一次 os.path.dirname()又去掉一层,指的就是项目的路径。

所以templates目录的路径为:

 'DIRS': [os.path.join(BASE_DIR, 'templates')],
  • 配置静态文件

    在项目配置目录中新建一个目录,名为 static,然后在 static 目录中再新建一个目录,名为 images。确保 static 目录与前面创建的 templates 目录位于同一级。与前面的 templates 目录一样,我们要告诉 Django 这个 static 目录的路径。为此,还要编辑项目的settings.py 模块。在这个文件中,我们要定义一个变量,指向 static 目录,并在一个数据结构中告诉 Django这个目录的路径。首先,在settings.py 文件的顶部定义一个变量,名为STATIC_DIR。

STATIC_DIR = os.path.join(BASE_DIR, 'static')

定义好这个变量之后,还要创建一个数据结构,名为STATICFILES_DIRS。这个数据结构的值是一系列路径,Django 在其中寻找要伺服的静态文件。最后,检查 settings.py 模块中有没有定义 STATIC_URL变量。

STATIC_URL = '/static/'

模板中使用静态文件, 在模板中新增一行({% load staticfiles %})告诉 Django 模板引擎,我们将在模板中使用静态文件。其次使用img标签,例如:

<img src="/static/images/1.jpg" alt="" />

或者使用{% static %}模板标签

<img src="{% static "images/1.jpg" %}" alt="" />

- 配置媒体文件

在项目配置目录中新建一个目录,名为 media,首先,打开 Django项目配置目录中的 settings.py 模块。我们将在这个文件中添加一些内容。与静态文件一样,媒体文件也放在文件系统中专门的一个目录中。因此,要告诉 Django这个目录的位置。 设置 MEDIA_ROOT与MEDIA_URL变量。MEDIA_ROOT变量告诉 Django 在哪里寻找上传的媒体文件,MEDIA_URL变量则指明通过什么 URL 伺服媒体文件。

MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,'media')

其次:找到 settings.py 文件中的 TEMPLATES列表,里面嵌套着context_processors列表。在context_processors列表中添加一个处理器,django.template.context_processors.media。添加之后,context_processors列表应该类似下面这样:


'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media'
],

最后, 让 Django 使用 MEDIA_URL伺服媒体内容。打开项目的urls.py 模块,修改 urlpatterns列表,调用 static()函数:

“`
urlpatterns = [


] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

“`

此外,还要在 urls.py 模块的顶部添加下述 import语句:


from django.conf import settings
from django.conf.urls.static import static

现在可以通过 /media/ URL 访问 media 目录中的媒体文件了。

- 基本流程

创建模板:

➊ 首先,创建要使用的模板,保存到 templates 目录中(在项目的 settings.py 模块中设定)。模板中可以使用 Django 模板变量(例如 {{ variable_name }})或模板标签。模板变量的值在相应的视图中设定。

➋ 在应用的 views.py 文件中找到所需的视图,或者新建一个。

➌ 把视图相关的逻辑写在视图函数中。例如,从数据库中检索数据,存到列表中。

➍ 在视图中构建一个字典,通过模板上下文传给模板引擎。

➎ 使用 render()辅助函数生成响应。这个函数的参数是请求对象、模板文件名和上下文字典。

➏ 如果还没把视图映射到 URL 上,修改项目的 urls.py文件和应用的 urls.py 文件。

在网页中引入静态文件的步骤:

➊ 把想用的静态文件放到项目的 static 目录中。这个目录在项目的 settings.py 模块中的STATICFILES_DIRS列表中设定。

➋ 在模板中引用静态文件。例如,图像通过 标签插入 HTML 页面。

➌ 记得在模板中加上 {% load staticfiles %},然后使用 {% static “” %}标签引用静态文件。把 替换成图像或其他资源的路径。只要想引用静态文件,使用static模板标签。

伺服媒体文件的步骤 :

➊ 把媒体文件放到项目的 media 目录中。这个目录由项目的 settings.py 模块中的 MEDIA_ROOT 变量设定。

➋ 在模板中使用 {{ MEDIA_URL }}上下文变量引用媒体文件。例如,引用上传的图像cat.jpg:


<img src="{{ MEDIA_URL}}cat.jpg" />

模型与数据库

数据库的连接

新建项目时,Django已经自动在 settings.py 模块中添加了 DATABASES变量,其值类似下面这样:


DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

但我使用的是mysql数据库,具体设置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day6',
        'USER':'root',
        'PASSWORD':'55555',
        'HOST':'39.108.81.211',
        'PORT':'3306'

    }
}

NAME为数据库的名称,USER为用户登录方式,一般都为ROOT,PASSWORD为当前数据库的密码,HOST为数据库主机地址,PORT是端口号为3306。

创建模型

模型文件在model.py文件中,定义模型时,要指定字段及其类型,并提供必须或可选的参数。默认情况下,每个模型都有一个自增整数字段,名为 id。这个字段自动分配,用作主键。

Django 内置的字段类型无所不包。下面介绍其中最常用的几个:
❏ CharField:存储字符数据(如字符串)的字段。max_length参数指定最多可存储的字符
数。
❏ URLField:类似于 CharField,不过是专用于存储 URL 的。也可指定 max_length参数。
❏ IntegerField:存储整数。
❏ DateField:存储 Python datetime.date对象。

每个字段都可指定 unique参数,设为 True时,字段的值在模型对应的底层数据库表中必须是唯
一的。看一下前面定义的 Category模型。name字段设为唯一的了,这表明每个分类的名称必须是
唯一的。这也意味着,可以把 name字段用作主键。
此外,各字段还可指定其他参数,例如通过 default=’value’设定默认值,指定字段的值可以为
空(null=True)或者不可以为空(null=False)。
为了建立模型之间的关系,Django 提供了三个字段类型,分别是:
❏ ForeignKey:用于建立一对多关系。
❏ OneToOneField:用于建立一对一关系。
❏ ManyToManyField:用于建立多对多关系。

例如模型:

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)
def __str__(self): # Python 2 还要定义 __unicode__
    return self.name

在 Python 中,str()和 unicode()方法生成类的字符串表示形式(类似于 Java 中的toString()方法)。在 Python 2.x 中,str()方法以 ASCII 格式表示字符串;如果需要支持 Unicode,还要实现 unicode()方法。在 Python 3.x 中,字符串默认就支持 Unicode,因此只需实现 str()方法。

数据库的迁移与更新

python manage.py makemigrations
python manage.py migrate

name == ‘main‘是个有用的技巧,既让 Python 模块作为可重用的模块,也让其作为
独立的 Python 脚本。可重用的模块是指可以导入其他模块(例如通过 import语句),而独
立的 Python 脚本可以在终端或命令提示符中执行(python module.py)。
因此,if name == ‘main‘条件语句中的代码仅在作为独立的 Python 脚本运行时才
执行。如果作为模块导入,那一段代码不执行,因为导入做是为了访问模块中的类或函数。

基本流程:

添加模型的过程可以分为以下 5 步。
➊ 首先在 Django 应用的 models.py 文件中定义模型。
➋ 更新 admin.py,注册新增的模型。
➌ 生成迁移:python manage.py makemigrations 。
➍ 运行迁移:python manage.py migrate。在数据库中创建模型所需的表和字段

Django中的模型、模版与视图

在 Django 中创建数据驱动页面主要分为 5 步:

➊ 在 views.py 文件中导入想使用的模型。

➋ 在视图函数中查询模型,获取想呈现的数据。

➌ 把从模型获取的数据传给模板上下文。

➍ 创建或修改模板,显示上下文中的数据。

➎ 把 URL 映射到视图上(如果还未做的话)。

以上就是在 Django 框架中把模型、视图和模板连接在一起的步骤

猜你喜欢

转载自blog.csdn.net/Lq_520/article/details/81261764