Django新建项目
1.cmd命令行设置python环境
环境中存在多个python版本时,需要选定特定版本建立独立的python环境。
把python3.6程序文件夹中的python.exe改为python3.6;把python3.8程序文件夹中的python.exe改为python3.8;
在cmd中需要使用什么版本就在原python命令加上版本号,
python -m venv web-venv #原命令行执行创建web-env的虚拟环境
python3.6 -m venv web-venv #使用3.6版本python命令行执行创建web-env的虚拟环境
python3.8 -m venv web-venv #使用3.8版本python命令行执行创建web-env的虚拟环境
根据以上命令执行创建好需要的python环境后,在激活创建好的python环境:
web-venv\Scripts\activate.bat
命令行会出现一个前缀(web-env) C:\Users\ .. \ 。代表已成功创建激活python虚拟环境
2.安装更新依赖包
升级pip,从此步开始所有的命令均是在虚拟环境中进行,新创建的虚拟环境自带的pip通常不是最新的版本。在运行pip命令时,会有警告,故而先升级pip,国内访问外网不稳定,以下命令使用阿里源进行下载。以下基于python3.6环境
python -m pip install --upgrade pip setuptools -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
3.安装Django
python -m pip install Django #一般速度相对比较慢
python -m pip install Django==2.1.* -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com #使用国内镜像源速度比较快
在python -m pip install Django中,后面可以添加想要指定下载的版本Django==2.2。不加则默认下载最新版本。
4.安装项目依赖
如果导入的是现有的django项目,在项目的文件夹中一般都会有‘requirements.txt’的文件夹,里面罗列的该项目所需要的的插件依赖包,只需要执行该文件即可安装该项目的所需要的全部插件依赖
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com # 前段是执行文件罗列需要安装的文件,后半段是使用国内镜像源下载所需的插件依赖
5.本地运行Django
python manage.py runserver
6.如果是新的项目需新建项目app应用
输入python manage.py startapp web_app指令
,创建名为web_app
的app:
目录结构如下
my_blog
│ db.sqlite3
│ manage.py
│
├─web_app
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─migrations
│ └─ __init__.py
│
└─my_blog
│ settings.py
│ urls.py
│ wsgi.py
└─ __init__.py
项目结构分解如下:
- 根目录
my_blog
下有两个文件:db.sqlite3是一个轻量级的数据库文件,用来存储项目产生的数据,比如博客文章;manage.py是项目执行命令的入口,比如runserver。 - 目录web_app是刚创建出来的app,用来放置博客文章相关的代码:后台管理文件
admin.py
,数据模型文件models.py
,视图文件views.py
,存放数据迁移文件的目录migrations
。 - 根目录下还有一个
my_blog
目录,其中的settings.py包含项目的配置参数,urls.py则是项目的根路由文件。
1)注册app到项目(settings)
接着我们需要修改项目配置文件,“告诉”Django现在有article这么一个app了。
打开my_blog
目录的settings.py
,找到INSTALLED_APPS
写入如下代码:
my_blog/settings.py
INSTALLED_APPS = [
# 其他代码
...
# 新增'article'代码,激活app
'web_app',
]
2)设置访问路径(urls)
然后再给app配置访问路径url。
url可以理解为访问网站时输入的网址链接,配置好url后Django才知道怎样定位app。
打开my_blog
目录下的urls.py
,增加以下代码:
my_blog/urls.py
from django.contrib import admin
# 记得引入include
from django.urls import path, include
# 存放映射关系的列表
urlpatterns = [
path('admin/', admin.site.urls),
# 新增代码,配置app的url
path('web_app/', include('web_app.urls', namespace='web_app')),
#当设置为:path('', include('web_app.urls', namespace='web_app')),时,直接一级域名路径就可以访问
]
path为Django的路由语法:
- 参数
web_app/
分配了app的访问路径; include
将路径分发给下一步处理;namespace
可以保证反查到唯一的url,即使不同的app使用了相同的url(后面会用到)。
记得在顶部引入include
。
在开发环境下,article的url为:http://127.0.0.1:8000/web_app/
还没结束。现在我们已经通过path
将根路径为web_app
的访问都分发给web_app这个app去处理。但是app通常有多个页面地址,因此还需要app自己也有一个路由分发,也就是web_app.urls`了。
web_app可以有多个页面,如列表页面、详情页面等,那么就需要如下两个url:
http://127.0.0.1:8000/web_app/list/
http://127.0.0.1:8000/web_app/detail/
app 中的 urls.py 就是用来区分它们的。
在app生成时并没有这个文件,因此需要自己在web_app文件夹中创建urls.py
,在里面输入:
web_app/urls.py
# 引入path
from django.urls import path
# 正在部署的应用的名称
app_name = 'web_app'
urlpatterns = [
# 目前还没有urls
]
urlpatterns
中暂时是空的,没写入任何路径的映射,不着急以后会写。
此时我们的app就配置完成了。
注意此时app还没有写好,因此启动服务器可能会报错,是正常的。
Django2.0之后,app的
urls.py
必须配置app_name
,否则会报错。
7.编写博客文章的Model模型
Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。
它们各自的职责如下:
层次 | 职责 |
---|---|
模型(Model),即数据存取层 | 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板(Template),即业务逻辑层 | 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 |
视图(View),即表现层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
简单来说就是Model存取数据,View决定需要调取哪些数据,而Template则负责将调取出的数据以合理的方式展现出来。
1)编写Model.py
如前面所讲,Django中通过模型(Model)映射到数据库,处理与数据相关的事务。
对博客网站来说,最重要的数据就是文章。所以首先来建立一个存放文章的数据模型。
打开web_app/models.py
文件,输入如下代码:
web_app/models.py
from django.db import models
# 导入内建的User模型。
from django.contrib.auth.models import User
# timezone 用于处理时间相关事务。
from django.utils import timezone
# 博客文章数据模型
class ArticlePost(models.Model):
# 文章作者。参数 on_delete 用于指定数据删除的方式
author = models.ForeignKey(User, on_delete=models.CASCADE)
# 文章标题。models.CharField 为字符串字段,用于保存较短的字符串,比如标题
title = models.CharField(max_length=100)
# 文章正文。保存大量文本使用 TextField
body = models.TextField()
# 文章创建时间。参数 default=timezone.now 指定其在创建数据时将默认写入当前的时间
created = models.DateTimeField(default=timezone.now)
# 文章更新时间。参数 auto_now=True 指定每次数据更新时自动写入当前时间
updated = models.DateTimeField(auto_now=True)
# 内部类 class Meta 用于给 model 定义元数据
class Meta:
# ordering 指定模型返回的数据的排列顺序
# '-created' 表明数据应该以倒序排列
ordering = ('-created',)
# 函数 __str__ 定义当调用对象的 str() 方法时的返回值内容
def __str__(self):
# return self.title 将文章标题返回
return self.title
2)数据迁移(Migrations)
编写好了Model后,接下来就需要进行数据迁移。迁移是Django对模型所做的更改传递到数据库中的方式。
注意,每当对数据库进行了更改(添加、修改、删除等)操作,都需要进行数据迁移。
① 输入python manage.py makemigrations
,对模型的更改创建新的迁移表:
②然后输入python manage.py migrate
,应用迁移到数据库中:
再重复一次:每当你修改了models.py
文件,都需要用makemigrations
和migrate
这两条指令迁移数据。
在迁移之后,Model的编写就算完成了。
6 条评论
你的文章充满了创意,真是让人惊喜。 https://www.4006400989.com/qyvideo/77315.html
你的文章让我心情愉悦,真是太棒了!http://www.fzmdyskj.com
看的我热血沸腾啊https://www.ea55.com/
不错不错,我喜欢看 https://www.237fa.com/
看的我热血沸腾啊https://www.237fa.com/
叼茂SEO.bfbikes.com