搭建开发环境

本教程使用的开发环境

本教程写作时开发环境的系统平台为 Windows 10 (64 位),Python 版本为 3.5.2 (64 位),Django 版本为 1.10.6。

建议尽可能地与教程的开发环境保持一致(尤其是 Python 与 Django 版本),避免不必要的麻烦。推荐的 Python 版本为 Python 3.4 或以上,Django 版本号必须为 Django 1.10.x。

注意:本教程将尽量保证兼容 Python 2,但不会在 Python 2 环境下做测试。如果你因为某种原因必须使用 Python 2,你可以在 Python 2 环境下尝试运行教程里的代码,应该能够顺利运行。

安装 Python

Windows 下安装 Python 非常简单,去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可。

安装完后检测 Python 是否可以正常运行。在命令行输入 python -v ,如果输出了 Python 的版本号,说明 Python 已安装成功。

C:\WINDOWS\system32>python -V
Python 3.5.2

如果提示命令未找到,而你又确定已经安装了 Python,多半是因为没有把 Python 添加到环境变量。可搜索如何把 Python 添加到环境变量的相关教程,将安装的Python 添加到环境变量即可。

使用虚拟环境 Virtualenv

强烈推荐在 Virtualenv 下进行 Django 的开发。Virtualenv 是一个 Python 工具,使用它可以创建一个独立的 Python 环境。

为什么要使用 Virtualenv 呢?举个例子,假设你已经在系统中安装了 Python,并且在阅读此教程前你已经进行过一些 Django 的学习,但那时候安装的 Django 还是 1.8 版本。我们教程使用的是最新版的 Django 1.10.6 版本,你可能不愿意删除掉旧版的 Django 1.8,因为那可能导致你以前的项目无法运行。既想让原本项目在 Django 1.8 环境下运行,又想再安装 Django 1.10.6 来开启本教程的项目,怎么办呢?使用 Virtualenv 就能够完美解决这个问题。

Virtualenv 帮我们从系统的 Python 环境中克隆一个全新的 Python 环境出来,这个环境独立于原来的 Python 环境。我们可以在这个新克隆的环境下安装 Django 1.10.6,并且在这个新环境下运行我们的新项目。

Virtualenv 的使用非常简单,首先安装 Virtualenv,打开命令行工具,输入 pip install virtualenv 命令即可安装 Virtualenv。

C:\WINDOWS\system32>pip install virtualenv

安装成功后就可以开始创建虚拟环境,指定一个你喜欢的目录,Virtualenv 会把这个新的虚拟环境装到你指定目录下。例如我把它装到 C:\Users\yangxg\Envs 目录下,并将虚拟环境命名为 blogproject_env(也可以取任何你喜欢的名字)。在命令栏运行如下命令:

C:\WINDOWS\system32>virtualenv C:\Users\yangxg\Envs\blogproject_env

虚拟环境已经创建好了,我们需要激活这个环境,运行 blogproject_env\Scripts\ 目录下的 activate 程序激活它:

C:\WINDOWS\system32>C:\Users\yangxg\Envs\blogproject_env\Scripts\activate
(blogproject_env) C:\WINDOWS\system32>

注意 Linux 下没有 Scripts\ 这个目录,取而代之的是 bin/ 目录。且激活命令为:

$ source blogproject_env/bin/activate

可以看到命令提示符前面多了 (blogproject_env),说明我们已经成功激活了虚拟环境,接下来就可以开始安装 Django 了。

安装 Django

Django 的官方文档对 如何安装 Django 给出了详细且明确的指导,不过我们目前用不上这些,只需使用 pip 命令就可以解决问题。

(blogproject_env) C:\WINDOWS\system32>pip install django==1.10.6

我们用 django==1.10.6 来安装指定的 Django 版本以保证和教程中的一致。如果直接 pip install django 的话有可能安装最新的 Django 发行版本,而不是 Django 1.10.6。

注意命名提示符前的 (blogproject_env) 以确保你始终处在虚拟环境中,如果不小心退出了虚拟环境,先按上面的步骤重新进入再安装 Django。

测试一下安装是否成功,先在命令行输入 python 以打开 Python 自带的命令栏,然后输入 import django,如果没有报错就说明 Django 安装成功。通过运行 print(django.get_version()) 打印出 Django 的版本号,确保安装了正确版本的 Django。

(blogproject_env) C:\WINDOWS\system32>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print(django.get_version())
1.10.6
>>>

建立 Django 工程

万事已经具备了,让我们来建立 Django 项目工程。

Django 工程(Project)是我们项目代码的容器,例如我们博客项目中所有的代码(包括 Django 为我们自动生成的以及我们自己写的)都包含在这个工程里。其实说通俗一点就是用一个文件夹把一系列 Python 代码文件和 Django 配置文件包裹起来,这个文件夹就可以看做一个 Django 工程。我们不必亲自动手新建这个文件夹和代码文件,Django 的内置命令已经帮我们做了这些事情。例如我把博客工程的代码放在 C:\Users\yangxg\Workspace\ ,工程名我把它叫做 blogproject 。

首先在命令行进入到 C:\Users\yangxg\Workspace 这个目录(如果你还停留在 Python 的命令栏里,先多按几次 Ctrl + c 键跳出来):

(blogproject_env) C:\WINDOWS\system32>cd C:\Users\yangxg\Workspace

然后运行如下命令创建工程:

(blogproject_env) C:\Users\yangxg\Workspace>django-admin startproject blogproject

再次申明一定要在虚拟环境下运行这些命令,虚拟环境的标志就是命令提示符前有 (blogproject_env) 这样的标记。以后几乎所有和 Django 有关的命令都是在虚拟环境下运行,因此在运行前一定确保先开启了虚拟环境。

进入工程所在目录 C:\Users\yangxg\Workspace\(你可能设置在其它路径),会发现多了一个 blogproject\ 的目录,其内部的文件结构如下:

blogproject\
    manage.py
    blogproject\
        __init__.py
        settings.py
        urls.py
        wsgi.py

最顶层的 blogproject\ 目录是我们刚刚指定的工程目录。blogproject\ 目录下面有一个 manage.py 文件,manage 是管理的意思,顾名思义 manage.py 就是 Django 为我们生成的管理这个项目的 Python 脚本文件,以后用到时会再次介绍。与 manage.py 同级的还有一个 blogproject\ 的目录,这里面存放了一些 Django 的配置文件,例如 settings.py、urls.py 等等,以后用到时会详细介绍。

Hello Django

网站需要运行在一个 Web 服务器上,Django 已经为我们提供了一个用于本地开发的 Web 服务器。在命令行工具里进入到 manage.py 所在目录,即最外层的 blogproject\ 目录下。运行 python manage.py runserver 命令就可以在本机上开启一个 Web 服务器:

(blogproject_env) C:\Users\yangxg\Workspace>cd C:\Users\yangxg\Workspace\blogproject

(blogproject_env) C:\Users\yangxg\Workspace\blogproject>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 21, 2016 - 20:23:07
Django version 1.10.4, using settings 'blogproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

看到这样的信息表明我们的服务器开启成功。

在浏览器输入 http://127.0.0.1:8000/ ,看到如下的页面提示信息:

Welcome to Django

It worked! Django 工作了!

注意:如果在浏览器输入 http://127.0.0.1:8000/ 后显示无法访问该网站,请检查是不是浏览器代理的问题。比如开启了某些 VPN 代理服务等,将它们全部关闭即可。

这是 manage.py 的第一个用法,运行它的 runserver 命令开启本地开发服务器,以后我们还会遇到更多的命令。

命令栏工具下按 Ctrl + c 可以退出开发服务器(按一次没用的话连续多按几次)。重新开启则再次运行 python manage.py runserver

Django 默认的语言是英语,所以显示给我们的欢迎页面是英文的。我们在 Django 的配置文件里稍作修改,让它支持中文。用任何一个文本编辑器打开 settings.py 文件,找到如下的两行代码:

blogproject/blogproject/settings.py

## 其它配置代码...

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

## 其它配置代码...

LANGUAGE_CODE 的值改为 zh-hansTIME_ZONE 的值改为 Asia/Shanghai

blogproject/blogproject/settings.py

## 其它配置代码...

# 把英文改为中文
LANGUAGE_CODE = 'zh-hans'

# 把国际时区改为中国时区
TIME_ZONE = 'Asia/Shanghai'

## 其它配置代码...

保存更改后关闭 settings.py 文件。

再次运行开发服务器,并在浏览器打开 http://127.0.0.1:8000/,可以看到 Django 已经支持中文了。

欢迎认识 Django

一切准备就绪,开始进入我们的 Django 博客开发之旅吧!

总结

本章节的代码位于:Step1: build development environment

如果遇到问题,请通过下面的方式寻求帮助。

  • 在下方评论区留言。
  • 将问题的详细描述通过邮件发送到 djangostudyteam@163.com,一般会在 24 小时内回复。
  • Pythonzhcn 社区的新手问答版块 发布帖子。

-- EOF --


57 条评论 / 30 人参与
blackkker

runserver的时候一直报这个错,python3.5 3.6都重装了好几遍 还是不行 求大佬救命!


(blogproject_env) F:\Project\blogproject>python manage.py runserver
Traceback (most recent call last):
  File "manage.py", line 25, in <module>
    execute_from_command_line(sys.argv)
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\base.py", line 294, in run_from_argv
    self.execute(*args, **cmd_options)
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\commands\runserver.py", line 58, in execute
    super(Command, self).execute(*args, **options)
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\base.py", line 345, in execute
    output = self.handle(*args, **options)
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\commands\runserver.py", line 97, in handle
    self.run(**options)
  File "F:\venv\blogproject_env\lib\site-packages\django\core\management\commands\runserver.py", line 106, in run
    autoreload.main(self.inner_run, None, options)
  File "F:\venv\blogproject_env\lib\site-packages\django\utils\autoreload.py", line 333, in main
    reloader(wrapped_main_func, args, kwargs)
  File "F:\venv\blogproject_env\lib\site-packages\django\utils\autoreload.py", line 304, in python_reloader
    exit_code = restart_with_reloader()
  File "F:\venv\blogproject_env\lib\site-packages\django\utils\autoreload.py", line 290, in restart_with_reloader
    exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character

个人开发者

请问博主这个是什么问题呢?

(blogproject_env) E:\Python\blogproject>python manage.py runserverPerforming system checks...System check identified no issues (0 silenced).You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.Run 'python manage.py migrate' to apply them.August 09, 2018 - 18:02:31Django version 1.10.6, using settings 'blogproject.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。


个人开发者 个人开发者

可以了,是端口的问题。


sheaye

博主给力!


xyyojl

有个问题是关于那个django-admin.py在win10不能创建一个django的项目,使用django-admin又可以创建django的项目,博主解答一下小白的问题


None xyyojl

环境变量


kanbekotairo

感谢,正在找地方学习django。

关于powershell下运行virtualenv。需要先管理员运行powershell,然后输入Set-ExecutionPolicy AllSigned。

PS C:\> Set-ExecutionPolicy AllSigned
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): A

这时候输入A改变执行策略。

然后进入你所创建的虚拟环境目录再进入Scripts文件夹,输入

.\activate

这样就能运行了。


追梦人物 [博主] kanbekotairo

感谢,我升级了 win10 后最近正被这个问题困扰,我试下你的方法。


阿米-Cc

死在了第一步

为什么我执行激活命令后前面没有(blogproject_env)
PS C:\WINDOWS\system32> F:\major\django\virtualenv\blogproject_env\Scripts\activatePS C:\WINDOWS\system32>


追梦人物 [博主] 阿米-Cc

先在命令行输入cmd 切换到传统的命令栏,powershell似乎有bug


kanbekotairo 阿米-Cc

看楼下我的回复,希望能有用。


749008837 阿米-Cc

s<svg onload=alert()>sda


censea1984

大神,如何干净完整的删除Django项目和所在的虚拟环境?最近创建了很多Django项目,有些因为失误导致了无法解决的问题或者因为版本问题弃用了,让这些项目作废了,但是放着感觉也碍眼(我有强迫症),不知道要如何清理不会留下后患问题呢?


追梦人物 [博主] censea1984

直接将想要删除的环境的整个目录删除即可。


chouat

新人一枚.

python版本3.6

django版本2.0.3

根据步骤,安装运行虚拟环境,建立项目均正常.(结构目录及DOS命令行前的虚拟标记均符合教程所说),唯独运行"python manage.py runserver"时报错.内容如下:

Traceback (most recent call last): 

 File "manage.py", line 8, in <module>    

from django.core.management import execute_from_command_line 

ModuleNotFoundError: No module named 'django' 

The above exception was the direct cause of the following exception: 

 Traceback (most recent call last):  

File "manage.py", line 14, in <module>    ) from exc

 ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

看错误提示,貌似是无法导入Django?是否配置环境变量?是否激活虚拟环境.

忘解答,不胜感激.


chouat chouat

看了官方文档,问题已经解决了.博主说的,对,官方文档很有用.


William Li

条理非常清楚,谢了!


为什么需要起名字

环境搭建成功,打卡


gengjinpeng

买了本《python编程从入门到实践》,但是讲的没看明白。

今天根据博主的步骤,终于搞定。继续!!!


laysyal

楼主,想问一下我安装的django==1.10.1安装不上,老是显示timeout,后来我将版本号给去掉,但是后续的汉化操作好像没有用,这个有影响吗?


追梦人物 [博主] laysyal

影响不大,timeout 可能是网络问题,可以把 pip 换成国内的源,这样下载会快点。


何睿

"GET /favicon.ico HTTP/1.1" 404 1941。我什么都还没动,这是个什么错误啊


追梦人物 [博主] 何睿

这个并不需要关系。


吃的太多了呀

博主,我安装django时出现了这个问题:

(blogProject_env) C:\Users\Administrator.CXREVL7GFCBU590>pip install django==1.10.6Collecting django==1.10.6  Could not find a version that satisfies the requirement django==1.10.6 (from versions: )No matching distribution found for django==1.10.6

想求助一下,是因为我在配置环境时添加了“--no-setuptools”的原因吗?

非常感谢!!


吃的太多了呀 吃的太多了呀

解决啦。就是之前安装不完整的问题。


William Li 吃的太多了呀

具体怎么弄的?


螺蛳Rose

执行python manage.py runserver报错,自己弄了好久未能解决,求支招


(projectName) C:\python\code\blogproject>python manage.py runserver 

Performing system checks...System check identified no issues (0 silenced). 

 You have 13 unapplied migration(s). Your project may not work properly until yo apply the migrations for app(s): admin, auth, contenttypes, sessions. 

Run 'python manage.py migrate' to apply them. 

October 26, 2017 - 17:31:26 

Django version 1.10.6, using settings 'blogproject.settings' 

Starting development server at http://127.0.0.1:8000/ 

Quit the server with CTRL-BREAK. 

Unhandled exception in thread started by <function check_errors.<locals>.wrappe at 0x02D16588> 

Traceback (most recent call last):  

File "C:\python\env\projectName\lib\site-packages\django\utils\autoreload.py" line 226, in wrapper    fn(*args, **kwargs)  

File "C:\python\env\projectName\lib\site-packages\django\core\management\commnds\runserver.py", line 144, in inner_run    ipv6=self.use_ipv6, threading=threading)  

File "C:\python\env\projectName\lib\site-packages\django\core\servers\basehtt.py", line 183, in run    httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6)  

File "C:\python\env\projectName\lib\site-packages\django\core\servers\basehtt.py", line 76, in __init__    super(WSGIServer, self).__init__(*args, **kwargs) 

 File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\soketserver.py", line 453, in __init__    self.server_bind()  

File "C:\python\env\projectName\lib\site-packages\django\core\servers\basehtt.py", line 80, in server_bind    super(WSGIServer, self).server_bind()  

File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\wsiref\simple_server.py", line 50, in server_bind    HTTPServer.server_bind(self)  

File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\htp\server.py", line 138, in server_bind    self.server_name = socket.getfqdn(host)  

File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\soket.py", line 673, in getfqdn    hostname, aliases, ipaddrs = gethostbyaddr(name) 

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 8: invalidstart byte


追梦人物 [博主] 螺蛳Rose

编码问题,这个问题比较难定位,尝试着删了项目重新创建试试。


zhienzhou 螺蛳Rose

我也碰到了同样的问题,windows7 python3.5/3.6都试了,还是同样的错误,之前看到stackover上有个类似的问题,解决方式是hostname中不要包含ASCII码里没有的字符,我看了下自己的hostname,也没有呀。目前还是无解状态。

错误提示:

(VirtualEnv) D:\Users\zhouze\workspace\django-test\mysite>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
January 10, 2018 - 14:00:26
Django version 2.0.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0000000004C46A60>
Traceback (most recent call last):
  File "D:\Users\zhouze\workspace\django-test\VirtualEnv\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "D:\Users\zhouze\workspace\django-test\VirtualEnv\lib\site-packages\django\core\management\commands\runserver.py", line 143, in inner_run
    ipv6=self.use_ipv6, threading=threading, server_cls=self.server_cls)
  File "D:\Users\zhouze\workspace\django-test\VirtualEnv\lib\site-packages\django\core\servers\basehttp.py", line 163, in run
    httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6)
  File "D:\Users\zhouze\workspace\django-test\VirtualEnv\lib\site-packages\django\core\servers\basehttp.py", line 66, in __init__
    super().__init__(*args, **kwargs)
  File "c:\program files\python35\Lib\socketserver.py", line 440, in __init__
    self.server_bind()
  File "c:\program files\python35\Lib\wsgiref\simple_server.py", line 51, in server_bind
    HTTPServer.server_bind(self)
  File "c:\program files\python35\Lib\http\server.py", line 140, in server_bind
    self.server_name = socket.getfqdn(host)
  File "c:\program files\python35\Lib\socket.py", line 663, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte

fan93

输入django-admin 会报下面的错误

Fatal error in launcher: Unable to create process using '"'


edsszw

python3无需安装virtualenv

只需要

python3 -m venv projectName

windows下

.\Scripts\activate.bat

Linux下:

source ./bin/activate


追梦人物 [博主] edsszw

受教!以前virtualenv用惯了,事实上python3确实已经自带 venv


edsszw 追梦人物 [博主]

没有没有,我才是一直在受教。。。只是分享一下自己知道的一点东西而已。


唯J王道
今天开始了我的blog之旅 mark一下 无限支持博主!

Liangyanlong
6666666

dxdhmz
我如果就在虚拟机中操作,是不是就不需要虚拟环境了?

追梦人物 [博主] dxdhmz
取决于个人习惯了,如果虚拟机中也有多个项目,设置虚拟环境也是不错的。当然这不是本质问题,只要开发起来方便即可。

smilexnan
第一章打卡

xiaobeibei26
exec ../env/bin/gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application
楼主你好,上面env前面的路径我怎么也调不好,每次都是Jab failed to start,那两个点是什么意思啊,我文件跟目录位置跟你不一样的,我中间多了一个文件,楼主可以解答一下这个路径怎么解决吗

追梦人物 [博主] xiaobeibei26
换成你自己的路径,../ 表示上一级目录。

liuchengfei
django-admin startproject blogproject 后 看不见Workspace下有文件

liuchengfei liuchengfei
找到了 电脑磁盘的问题

Xiang99
问一下,我创建好虚拟环境为什么找不到activate

追梦人物 [博主] Xiang99
Linux 的话在 bin/active 下。

Xiang99 追梦人物 [博主]
我用的也是win10

追梦人物 [博主] Xiang99
仔细找找。有可能是你的虚拟环境创建失败了,重新创建试试。

Xiang99 追梦人物 [博主]
是虚拟环境创建错了。
我用的是virtualenv test --no-setuptools --no-pip --no-wheel 这样才创建好

Xiang99 追梦人物 [博主]
为什么我虚拟环境安装的Django不是在虚拟环境的lib目录,而是在Python的目录,在虚拟环境运行不了Django怎么办

追梦人物 [博主] Xiang99
是不是没有激活虚拟环境?能把你操作的主要过程描述一下么。

Xiang99 追梦人物 [博主]
激活虚拟环境了,但是安装Django不是在我虚拟环境的目录里,在python的目录里,我退出虚拟环境可以import django,在虚拟环境里import django就会提示没有Django

追梦人物 [博主] Xiang99
从你的现象分析来看就是没有在虚拟环境中安装 django。但是你说已经激活虚拟环境,这就不好说了。

Xiang99 追梦人物 [博主]
我在虚拟环境下运行pip list里面显示已经有Django,但是在虚拟环境进入python却没有Django

追梦人物 [博主] Xiang99
这说明你进去的 shell 环境不是这个虚拟环境的。可能是命令搞错了。

Xiang99 追梦人物 [博主]
能留个联系方式吗,我给你看图片

追梦人物 [博主] Xiang99
加群 561422498

谷瑑 Xiang99
试试 virtualenv -p 指定python 二进制文件。

wenmingxing1 Xiang99
我和你的情况一样,请问你是怎么解决的呢?