导读:本篇文章首席CTO笔记来给大家介绍有关django怎么创建应用的相关内容,希望对大家有所帮助,一起来看看吧。
如何在django上自动创建createuperuser
1. 创建项目
运行面命令创建 django 项目项目名称叫 mysite :
$ django-admin.py startproject mysite
创建项目目录:
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
说明:
__init__.py :让 Python 该目录发包 (即组模块)所需文件 空文件般需要修改
manage.py :种命令行工具允许种式与该 Django 项目进行交互 键入python manage.py help看能做 应需要编辑文件;目录纯便
settings.py :该 Django 项目设置或配置
urls.py:Django项目URL路由设置目前空
wsgi.py:WSGI web 应用服务器配置文件更细节查看 How to deploy with WSGI
接修改 settings.py 文件例:修改 LANGUAGE_CODE、设置区 TIME_ZONE
SITE_ID = 1
LANGUAGE_CODE = 'zh_CN'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
面启 [Time zone]() 特性需要安装 pytz:
$ sudo pip install pytz
2. 运行项目
运行项目前我需要创建数据库表结构我使用默认数据库:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
启服务:
$ python manage.py runserver
看面输:
Performing system checks...
System check identified no issues (0 silenced).
January 28, 2015 - 02:08:33
Django version 1.7.1, using settings 'mysite.settings'
Starting development server at
Quit the server with CONTROL-C.
端口8000启本服务器, 并且能台电脑连接访问 既服务器已经运行起现用网页浏览器访问 应该看令赏悦目淡蓝色 Django 欢迎页面始工作
指定启端口:
$ python manage.py runserver 8080
及指定 ip:
$ python manage.py runserver 0.0.0.0:8000
3. 创建 app
前面创建项目并且功运行现创建 app app 相于项目模块
项目目录创建 app:
$ python manage.py startapp polls
操作功 mysite 文件夹看已经叫 polls 文件夹目录结构:
polls
├── __init__.py
├── admin.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
1 directory, 6 files
4. 创建模型
每 Django Model 都继承自 django.db.models.Model
Model 每属性 attribute 都代表 database field
通 Django Model API 执行数据库增删改查, 需要写些数据库查询语句
打 polls 文件夹 models.py 文件创建两模型:
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def was_published_recently(self):
return self.pub_date = timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
mysite/settings.py 修改 INSTALLED_APPS 添加 polls:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
添加新 app 我需要运行面命令告诉 Django 模型做改变需要迁移数据库:
$ python manage.py makemigrations polls
看面输志:
Migrations for 'polls':
0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
polls/migrations/0001_initial.py 查看迁移语句
运行面语句查看迁移 sql 语句:
$ python manage.py sqlmigrate polls 0001
输结:
BEGIN;
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);
CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
CREATE TABLE "polls_choice__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id"));
INSERT INTO "polls_choice__new" ("choice_text", "votes", "id") SELECT "choice_text", "votes", "id" FROM "polls_choice";
DROP TABLE "polls_choice";
ALTER TABLE "polls_choice__new" RENAME TO "polls_choice";
CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");
COMMIT;
运行面命令检查数据库否问题:
$ python manage.py check
再运行面命令创建新添加模型:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, polls, auth, sessions
Running migrations:
Applying polls.0001_initial... OK
总结修改模型需要做几步骤:
修改 models.py 文件
运行 python manage.py makemigrations 创建迁移语句
运行 python manage.py migrate模型改变迁移数据库
阅读 django-admin.py documentation查看更 manage.py 用
创建模型我通 Django 提供 API 做测试运行面命令进入 python shell 交互模式:
$ python manage.py shell
面些测试:
from polls.models import Question, Choice # Import the model classes we just wrote.
# No questions are in the system yet.
Question.objects.all()
[]
# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
# Save the object into the database. You have to call save() explicitly.
q.save()
# Now it has an ID. Note that this might say "1L" instead of "1", depending
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
q.id
1
# Access model field values via Python attributes.
q.question_text
"What's new?"
q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=)
# Change values by changing the attributes, then calling save().
q.question_text = "What's up?"
q.save()
# objects.all() displays all the questions in the database.
Question.objects.all()
[]
打印所 Question 输结 []我修改模型类使其输更易懂描述修改模型类:
from django.db import models
class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text
class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
接继续测试:
from polls.models import Question, Choice
# Make sure our __str__() addition worked.
Question.objects.all()
[]
# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
Question.objects.filter(id=1)
[]
Question.objects.filter(question_text__startswith='What')
[]
# Get the question that was published this year.
from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)
# Request an ID that doesn't exist, this will raise an exception.
Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.
# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
Question.objects.get(pk=1)
# Make sure our custom method worked.
q = Question.objects.get(pk=1)
# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
q = Question.objects.get(pk=1)
# Display any choices from the related object set -- none so far.
q.choice_set.all()
[]
# Create three choices.
q.choice_set.create(choice_text='Not much', votes=0)
q.choice_set.create(choice_text='The sky', votes=0)
c = q.choice_set.create(choice_text='Just hacking again', votes=0)
# Choice objects have API access to their related Question objects.
c.question
# And vice versa: Question objects get access to Choice objects.
q.choice_set.all()
[, , ]
q.choice_set.count()
3
# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
Choice.objects.filter(question__pub_date__year=current_year)
[, , ]
# Let's delete one of the choices. Use delete() for that.
c = q.choice_set.filter(choice_text__startswith='Just hacking')
c.delete()
面部测试涉及 django orm 相关知识详细说明参考 DjangoORM
5. 管理 admin
Django优秀特性, 内置Django admin台管理界面, 便管理者进行添加删除网站内容.
新建项目系统已经我设置台管理功能见 mysite/settings.py:
INSTALLED_APPS = (
'django.contrib.admin', #默认添加台管理功能
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mysite',
)
同已经添加进入台管理 url, mysite/urls.py 查看:
url(r'^admin/', include(admin.site.urls)), #使用设置url进入网站台
接我需要创建管理用户登录 admin 台管理界面:
$ python manage.py createsuperuser
Username (leave blank to use 'june'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
总结
看项目目录结构:
mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
├── polls
│ ├── __init__.py
│ ├── admin.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ ├── models.py
│ ├── templates
│ │ └── polls
│ │ ├── detail.html
│ │ ├── index.html
│ │ └── results.html
│ ├── tests.py
│ ├── urls.py
│ ├── views.py
└── templates
└── admin
└── base_site.htm
通面介绍 django 安装、运行及何创建视 图模型清晰认识接深入习 django 自化测试、持久化、间件、 际 化等知识
该如何命名你的Django Apps
很多人在创建Django Apps时会有自己的命名习惯,例如有人喜欢命名详细具体的名字,生怕不够具体。
实际上,一个好的命名系统取的名字往往乏味,枯燥,显而易见。在为Django Apps命名上可遵循以下原则:
1.尽量保持一个单词作为你的APP名称,例如:flavors,animals,blog,polls,dreams,finances.一个好的、通俗易懂的App名字将使得项目更容易维护。
2.一般来说,应用程序的名称应该是应用程序主model的复数版本,但是这个规则有很多例外,"blog"是最常见的一种。
3.不过,不能只考虑APP的主model,你应该也考虑你想如何构造你的UTLs,如果你想你网站的blog通过 访问,name你可以考虑将你的博客APP命名为"weblog",而非"blog"、"posts"、"blogposts",即使你的主model是"Post",这样做可以让你更容易地看到哪个应用程序对应于站点的哪一部分。
4.使用有效的、符合PEP 8的、可导入的Python软件包名称:带小写字母的短名称,不带数字、破折号、句点、空格或特殊字符。如果需要可读性,可以使用下划线分隔单词,但不鼓励使用下划线。
总的来说命名Django Apps应该:遵循PEP8有效的命名(尽量不用下划线),根据你想构造的URL访问地址命名你的APP名字,尽量用一个复数的单词来命名(根据你的主model)。
参考:Two Scoops of Django 1.11
Django应用的容器化部署
部署使用容器化的方式,以容器的方式来运行。
首先,创建Dockerfile:
接着,进入Dockerfile文件目录,执行命令构建镜像,镜像名称是myproject:v1:docker build -t myproject:v1 .
构建完成后,可以查看到我们刚刚创建的镜像:
最后,启动容器:docker run -d -p 9999:8000 -v /home/myproject/:/myproject/ --name myproject1 myproject:v1
如何写第一个属于自己的Web页面(Django)
上期(超实用搭建个人开发Web网页的软件及配置基础)已经详细的介绍了基于Django+MySQL+PyCharm组合配置的Web开发的基础架构。这期带读者跟着作者写第一个属于自己的Web页面,同时跟作者同一个局域网的其它用户也可以访问。
首先输入python manage.py startapp myFamilyWeb (表示创建一个自己的Web页面项目),如图1。
生成的myFamilyWeb里的目录结构里的含义如下:
外层的_init_.py文件标识myFamilyWeb是一个Python包。
admin.py 用于将Model定义注册到管理后台,是Django Admin 应用的配置文件。
apps.py用于应用程序本身的配置。
migrations目录用于存储models.py文件中Model的定义及修改。
migrations/_init_.py文件标识migrations是一个Python包。
models.py用于定义应用中所需要的数据表。
tests.py文件用于编写当前应用程序的单元测试。
views.py文件用于编写应用程序的视图。
以上的介绍都是myFamilyWeb应用的全部内容,后续需要做的就是填充对应的service逻辑对外提供服务。如果就这么启动,就会发现如图2一样访问不了。
想要实现访问自己第一个Web页面(myFamilyWeb),第一步是设置路由和在views.py增加一个可以访问的函数(图3-图6)。
配置模板和html(图7-图13)
配置写好了第一个最简单的Web页面,启动服务器。。。(图14)
在开发者电脑上的浏览器访问 (图15)
(配置防火墙端口)(图16)
设置允许多个主机访问 (图17)
在终端输入ipconfig
回车找到IPv4 的地址:192.168.0.102 (图18)
python manage.py runserver 0.0.0.0:8000 (这次启动的时候在后面添加0.0.0.0:8000)。
然后本地网络中的其它计算机就可以在浏览器中访问你的 IP 地址了, (这个网址只能同一个局域网的主机可以访问)
之后就是好好去学习如何写html文件了。。。
如何创建一个Django网站
本文演示如何创建一个简单的 django 网站,使用的 django 版本为1.7。
1. 创建项目
运行下面命令就可以创建一个 django 项目,项目名称叫 mysite :
$ django-admin.py startproject mysite
创建后的项目目录如下:
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
说明:
__init__.py :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。
manage.py :一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入python manage.py help,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。
settings.py :该 Django 项目的设置或配置。
urls.py:Django项目的URL路由设置。目前,它是空的。
wsgi.py:WSGI web 应用服务器的配置文件。更多细节,查看 How to deploy with WSGI
接下来,你可以修改 settings.py 文件,例如:修改 LANGUAGE_CODE、设置时区 TIME_ZONE
SITE_ID = 1
LANGUAGE_CODE = 'zh_CN'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
上面开启了 [Time zone]() 特性,需要安装 pytz:
$ sudo pip install pytz
2. 运行项目
在运行项目之前,我们需要创建数据库和表结构,这里我使用的默认数据库:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
然后启动服务:
$ python manage.py runserver
你会看到下面的输出:
Performing system checks...
System check identified no issues (0 silenced).
January 28, 2015 - 02:08:33
Django version 1.7.1, using settings 'mysite.settings'
Starting development server at
Quit the server with CONTROL-C.
这将会在端口8000启动一个本地服务器, 并且只能从你的这台电脑连接和访问。 既然服务器已经运行起来了,现在用网页浏览器访问 。你应该可以看到一个令人赏心悦目的淡蓝色 Django 欢迎页面它开始工作了。
你也可以指定启动端口:
$ python manage.py runserver 8080
以及指定 ip:
$ python manage.py runserver 0.0.0.0:8000
3. 创建 app
前面创建了一个项目并且成功运行,现在来创建一个 app,一个 app 相当于项目的一个子模块。
在项目目录下创建一个 app:
$ python manage.py startapp polls
如果操作成功,你会在 mysite 文件夹下看到已经多了一个叫 polls 的文件夹,目录结构如下:
polls
├── __init__.py
├── admin.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
1 directory, 6 files
4. 创建模型
每一个 Django Model 都继承自 django.db.models.Model
在 Model 当中每一个属性 attribute 都代表一个 database field
通过 Django Model API 可以执行数据库的增删改查, 而不需要写一些数据库的查询语句
打开 polls 文件夹下的 models.py 文件。创建两个模型:
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def was_published_recently(self):
return self.pub_date = timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
然后在 mysite/settings.py 中修改 INSTALLED_APPS 添加 polls:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
在添加了新的 app 之后,我们需要运行下面命令告诉 Django 你的模型做了改变,需要迁移数据库:
$ python manage.py makemigrations polls
你会看到下面的输出日志:
Migrations for 'polls':
0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
你可以从 polls/migrations/0001_initial.py 查看迁移语句。
运行下面语句,你可以查看迁移的 sql 语句:
$ python manage.py sqlmigrate polls 0001
输出结果:
BEGIN;
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);
CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
CREATE TABLE "polls_choice__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id"));
INSERT INTO "polls_choice__new" ("choice_text", "votes", "id") SELECT "choice_text", "votes", "id" FROM "polls_choice";
DROP TABLE "polls_choice";
ALTER TABLE "polls_choice__new" RENAME TO "polls_choice";
CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");
COMMIT;
你可以运行下面命令,来检查数据库是否有问题:
$ python manage.py check
再次运行下面的命令,来创建新添加的模型:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, polls, auth, sessions
Running migrations:
Applying polls.0001_initial... OK
总结一下,当修改一个模型时,需要做以下几个步骤:
修改 models.py 文件
运行 python manage.py makemigrations 创建迁移语句
运行 python manage.py migrate,将模型的改变迁移到数据库中
你可以阅读 django-admin.py documentation,查看更多 manage.py 的用法。
创建了模型之后,我们可以通过 Django 提供的 API 来做测试。运行下面命令可以进入到 python shell 的交互模式:
$ python manage.py shell
下面是一些测试:
from polls.models import Question, Choice # Import the model classes we just wrote.
# No questions are in the system yet.
Question.objects.all()
[]
# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
# Save the object into the database. You have to call save() explicitly.
q.save()
# Now it has an ID. Note that this might say "1L" instead of "1", depending
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
q.id
1
# Access model field values via Python attributes.
q.question_text
"What's new?"
q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=UTC)
# Change values by changing the attributes, then calling save().
q.question_text = "What's up?"
q.save()
# objects.all() displays all the questions in the database.
Question.objects.all()
[Question: Question object]
打印所有的 Question 时,输出的结果是 [Question: Question object],我们可以修改模型类,使其输出更为易懂的描述。修改模型类:
from django.db import models
class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text
class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
接下来继续测试:
from polls.models import Question, Choice
# Make sure our __str__() addition worked.
Question.objects.all()
[Question: What's up?]
# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
Question.objects.filter(id=1)
[Question: What's up?]
Question.objects.filter(question_text__startswith='What')
[Question: What's up?]
# Get the question that was published this year.
from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)
Question: What's up?
# Request an ID that doesn't exist, this will raise an exception.
Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.
# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
Question.objects.get(pk=1)
Question: What's up?
# Make sure our custom method worked.
q = Question.objects.get(pk=1)
# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
q = Question.objects.get(pk=1)
# Display any choices from the related object set -- none so far.
q.choice_set.all()
[]
# Create three choices.
q.choice_set.create(choice_text='Not much', votes=0)
Choice: Not much
q.choice_set.create(choice_text='The sky', votes=0)
Choice: The sky
c = q.choice_set.create(choice_text='Just hacking again', votes=0)
# Choice objects have API access to their related Question objects.
c.question
Question: What's up?
# And vice versa: Question objects get access to Choice objects.
q.choice_set.all()
[Choice: Not much, Choice: The sky, Choice: Just hacking again]
q.choice_set.count()
3
# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
Choice.objects.filter(question__pub_date__year=current_year)
[Choice: Not much, Choice: The sky, Choice: Just hacking again]
# Let's delete one of the choices. Use delete() for that.
c = q.choice_set.filter(choice_text__startswith='Just hacking')
c.delete()
上面这部分测试,涉及到 django orm 相关的知识,详细说明可以参考 Django中的ORM。
5. 管理 admin
Django有一个优秀的特性, 内置了Django admin后台管理界面, 方便管理者进行添加和删除网站的内容.
新建的项目系统已经为我们设置好了后台管理功能,见 mysite/settings.py:
INSTALLED_APPS = (
'django.contrib.admin', #默认添加后台管理功能
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mysite',
)
同时也已经添加了进入后台管理的 url, 可以在 mysite/urls.py 中查看:
url(r'^admin/', include(admin.site.urls)), #可以使用设置好的url进入网站后台
接下来我们需要创建一个管理用户来登录 admin 后台管理界面:
$ python manage.py createsuperuser
Username (leave blank to use 'june'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
总结
最后,来看项目目录结构:
mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
├── polls
│ ├── __init__.py
│ ├── admin.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ ├── models.py
│ ├── templates
│ │ └── polls
│ │ ├── detail.html
│ │ ├── index.html
│ │ └── results.html
│ ├── tests.py
│ ├── urls.py
│ ├── views.py
└── templates
└── admin
└── base_site.htm
通过上面的介绍,对 django 的安装、运行以及如何创建视 图和模型有了一个清晰的认识,接下来就可以深入的学习 django 的自动化测试、持久化、中间件、国 际 化等知识。
Django新手教程6,新建一个项目
感觉再不按套路出牌就要被群众围殴了,那咱么就开始吧。
打开CMD黑窗口,我们输入
workon django_env
我们先看看怎么在黑窗口里面穿梭于各个URL之间,你先看你现在所处的位置,一般来说,新打开的CMD,都是处于
C:/User/your_name
这个位置,我们先到D盘,根目录从C到D,我们只需要输入
D:
就可以到达D盘了,如果你的django_env是激活的那么,他会自动跳转到
D:/py_env/django_env
这个目录下,我们当然可以把项目就建在这里,但也可以建在别的地方。所以请输入(注意cd和两点之间有一个空格)
cd ..
cd是前往的意思,两个小点指的是父亲,意思是前往当前目录的父目录,
于是,我们来到
D:/py_env
目录下,再次输入
cd ..
于是我们达到
D:/
这已经是D盘的根目录的再输入cd ..已经没有什么效果了。如果你之前按照我的教程一步一步来,那么,你已经在在这个根目录上建好了一个叫django_project的空文件夹,如果你没有建好 ,那么请输入
mkdir django_project
创建一个这个文件夹,当然,你也可以在图形界面,打开我的计算机,然后到达位置右键新建文件夹。这里为了逼格和更加熟悉cmd窗口起见,我建议你还是用命令行。
我们cmd的路径(准确的说是工作路径)现在在D盘的根目录,
因此,请输入
cd django_project
表示前往 django_project ,当然,这个时候你得确定django_project是D盘根目录下的一个子目录。
如果,我们还处于
D:py_env/django_env
那么输入
cd django_project是无效的,你得按照我们刚才一步一步抵达D盘,然后在进入到django_project。或者,你可以直接输入绝对路径
cd D:/django_project
使用上面的命令,只要你处于D盘,无论是在哪一级的目录,都可以一步到位。
抵达现场,我们马上就要新建我们的项目了。
激动人心的一刻到了,请在CMD中输入
django-admin startproject mysite
这时,我们创建了一个项目,这个项目的名字叫mysite,等等,说好的做云盘,为毛名字不是mycloud呢?这就要提到django的精妙之处了,新建了一个项目,就相当于,我们在计算机上圈了一块地(D:/django_project/mysite目录以后就是我们网络服务这一块的地盘了),还没开始建展馆,为什么先圈地而不是直接新建一个展馆呢,因为我们圈了地就可以在地上建很多展馆啊,在django看来,云盘啥的,够不上称为一个项目,只能称之为应用(一座展馆),只有将很多展馆放在一起,才能称之为项目,也就是说,一个项目可以包含很多的应用(APP),比如我们的网站可以提供云盘服务,我们也可以,提供个人博客服务,我们还可以开一个讨论某植物的论坛啥的,反正就是为了将来能够提供全家桶服务,所以,云盘只能算做是一个APP。当然,目前我们只这块地上建一座提供云服务的展馆。其他的展馆以后再说。
还是在cmd黑窗口,请输入
dir
用这条指令可以列出当前目录下的子目录和存放文件的情况,
我们可以看到,生成一个叫mysite的子目录,实际上,在mysite的上面还有两个目录,一个目录是一个点,表示自己,也就是django_project本身,另一个目录是两个点,表示父目录,也就是D盘根目录。所以我们看到的是django_project目录的一家三代。
这和图形界面基本是统一的,下图的左上角圈的地方表示的就是父目录,至于本身目录嘛,就没必要刻意用什么图形表示了。
你用鼠标点击某个文件夹,实际上系统内部就是帮你运行了一下
cd 你点击的文件夹
你点击后退,则帮你运行
cd ..
回到正题,我们看到了一个mysite子目录,所以进去看看,请输入
cd mysite
然后输入
dir
查看情况
发现又有一个mysite目录,坑爹啊,俄罗斯套娃呢这是!
这一看就知道django是外国人搞得工具,子目录跟父目录叫同一个名字(好歹给子一级的目录起个名字叫mysite二世啥的行不。没办法,django设计者这么叫了,我们也不能随便乱改,以后我们把里面的那个mysite叫做子mysite,外面的那个叫父mysite以区分),仔细一看,旁边还有一个manage.py,先不不管这个,再进去子mysite看一下,还好,再没有mysite目录了,里面是
里面有4个py文件,看到没有,其中有一个是urls.py,URL之重要,需要专门一个文件来管理,如果你之前有认真看文章的话应该就能差不多猜到它是起什么作用的文件了。除了urls.py,settings.py也是非常重要的,都是用来管理mysite这个项目的,所以,我觉得最后这个mysite文件夹应该叫做mysite_manage因为它里面的东西,和它旁边的manage.py一样都是用来管理项目的。
为了让大家对项目结构有更清楚认识,我找了django官网上的图片
结语:以上就是首席CTO笔记为大家介绍的关于django怎么创建应用的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。