文章目录
一、配置开发环境
安装命令:
pip3 install django
查看版本:
python3 -m django --version
2.1.2
版本的选择:
作为学习当然选择最新版本了, 默认安装的也是最新版本。
django2.0 python3.4, python3.5, python3.6
django2.1 python3.5, python3.6, python3.7
更多版本对应信息请查看:
https://yiyibooks.cn/qy/django2/faq/install.html#faq-python-version-support
二、创建第一个项目
在命令行(终端)中,cd到你想要用来保存代码的目录,然后运行如下命令:
$ django-admin startproject mysite
创建的项目目录结构如下:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
- 外层的mysite/根目录仅仅是项目的一个容器。 它的命名对Django无关紧要;你可以把它重新命名为任何你喜欢的名字。
- manage.py: 一个命令行工具,可以使你用多种方式对Django项目进行交互。
- 内层的mysite/目录是你的项目的真正的Python包。 它是你导入任何东西时将需要使用的Python包的名字。
- mysite/init.py:一个空文件,它告诉Python这个目录应该被看做一个Python包。
- mysite/settings.py:该Django 项目的设置/配置。
- mysite/urls.py:该Django项目的URL声明;是你的Django站点的“目录”。
- mysite/wsgi.py:用于你的项目的与WSGI兼容的Web服务器入口。
注意:
项目的命名要避免与Python内置包或Django组件重名。
代码应该存在哪里?
将Python代码放在你的Web服务器的根目录不是个好主意,因为它可能会有让别人在网上看到你的代码的风险。 这样不安全。
将你的代码放置在Web服务器根目录以外的地方,例如/home/mycode。
三、开发服务器
1、启动服务器
在外部mysite目录,运行以下命令:
$ python3 manage.py runserver
看到以下输出表明你已经启动了Django开发服务器:
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
January 17, 2018 - 15:50:53
Django version 2.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
这是一个用纯Python写的轻量级Web服务器。 我们在Django中内置了它,这样你就可以在不配置用于生产环境的服务器 —— 例如Apache —— 的情况下快速开发出产品,直到你准备好上线。
需要注意的是:不要在任何生产环境使用这个服务器。
在浏览器地址栏输入:http://127.0.0.1:8000/, 就可以看到运行的效果了。
2、更改端口
默认情况下,runserver命令在内部IP的8000端口启动开发服务器。
使用如下命令更改端口号为8080:
$ python3 manage.py runserver 8080
请在浏览器地址栏输入:http://127.0.0.1:8080/, 查看端口修改后的运行效果。
注意:
以这种方式更改的端口号,会重新启动开发服务器,并且更改效果只在服务器运行期间有效。服务器以默认方式(runserver之后不加端口号)重启之后,会恢复为8000.
3、runserver服务器的自动重载
开发服务器启动之后,修改并保存代码,runserver服务器会自动重载,使代码生效。 但是,某些操作(如添加文件)不会触发重新启动,因此在这种情况下您必须重新启动服务器(这块需特别注意:后面的静态文件处理时,需要添加一些文件,是必须要重启服务器的,不然操作不会生效)。
四、创建投票应用程序
项目已经创建好了,接下来就要创建程序了。
1、项目与应用程序
项目和应用程序有什么区别? 应用程序是一种Web应用程序,它可以执行某些操作,例如Weblog系统,公共记录数据库或简单的民意调查应用程序。 项目是特定网站的配置和应用程序的集合。 项目可以包含多个应用程序。 一个应用程序可以在多个项目中。
Django带有一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。
2、创建应用程序
要创建您的应用,请确保您与manage.py位于同一目录中,然后输入以下命令:
$ python manage.py startapp polls
这将创建一个名为polls的目录,其布局如下:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
该目录结构将容纳我们的投票应用程序。
3、写下你的第一个视图
a、添加视图
添加视图在polls/views.py中进行:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
这里添加了一个最简单的视图,页面上只会显示括号中的文字。
b、调用视图
要调用视图,我们需要将它映射到一个URL - 为此我们需要一个URLconf。
要在polls目录中创建URLconf,请创建一个名为urls.py的文件。 你的app目录现在应该如下所示:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py. # 新增
views.py
然后,在polls/urls.py文件中包含以下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
下一步是将根URLconf指向polls.urls模块。 在mysite/urls.py中, 加入一个django.urls.include的import, 然后插入一个 include()函数 在 urlpatterns 列表中, 如下:
from django.urls import include, path
from django.contrib import admin
urlpatterns = [
path('polls/', include('polls.urls')),# 新增
path('admin/', admin.site.urls),
]
include() 函数允许引用其他URLconfs. 每当Django遇到include()时,它会截断与该点匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf以供进一步处理。
使用include()的目的是为了让URL更易进行热插拔(plug-and-play)。 由于polls是在他自己的URLconf(polls/urls.py),他们可以被放置在“/ polls /”,或“/ fun_polls /”下,或“/ content / polls /” ,或任何其他路径的根,应用程序将仍然工作。
何时使用include()?
包含其他网址格式时,您应始终使用include()。 admin.site.urls 是唯一的例外。
启动服务器,并在浏览器中转到http://localhost:8000/polls/,您应该看到文本“Hello, world. You’re at the polls index.“,这就是index视图中定义的文本内容。
c、path()函数
path()函数传递四个参数,两个参数:route和view,以及两个可选的参数:kwargs ,和name。
- path()参数:route
route是一个包含URL模式的字符串。 在处理请求时,Django从urlpatterns中的第一个正则开始并在列表中向下匹配,将所请求的URL与每个正则进行匹配,直到找到匹配的正则。
正则表达式不搜索GET和POST参数或域名。 例如,在https://www.example.com/myapp/的请求中,URLconf将查找myapp /。 在https://www.example.com/myapp/?page=3的请求中,URLconf也会查找myapp/。 - path()参数:view
当Django找到匹配的正则时,它会调用对应的视图函数,该函数以HttpRequest对象作为第一个参数,并且以route中的任何“捕获”值作为关键字参数。 - path()参数:kwargs
任意关键字参数可以在字典中传递给目标视图。本教程中不会使用该特性。 - path()参数:name
命名您的URL可以让您从Django其他地方明确地引用它,特别是在模板中。 这个强大的功能允许您在只操作单个文件的情况下对项目的URL正则进行全局更改。