如何用Python做Web开发?——Django环境配置
用Python做Web开发,Django框架是个非常好的起点。如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手。

概念
最近有个词儿很流行,叫做“全栈”(full stack)。各大IT培训机构几乎都在宣传这一概念。告诉你只需要交1XXXX元,就可以在XX天之内把自己变成一个“全栈工程师”。有了这个称号可不得了,收入马上可以上升若干个量级,从此走向通往人生巅峰的坦途……
醒醒,没那好事儿。
静下心来琢磨一下,XX天之内就可以学会的东西,门槛高吗?这么多人都能学会的东西,还有竞争优势吗?
所谓“全栈”,无非是同时掌握Web开发中的前端和后端开发技术而已。正是因为开发工具越来越好用,技术门槛越来越低,所以从前必须分工才能完成的工作,现在个人就能独立完成。
这种事儿不稀奇。从前作家写稿子都用打字机甚至手写,排版这些事儿都得有专业人士来完成。可如今呢?你写个公众号,从起草到发布一个人就可以搞定。如果你搞不定,欢迎往前翻翻,看我介绍Markdown的那几篇文章。
但是门槛低也是好事儿。这意味着你也可以很容易掌握Web开发技术。虽然这不能保证你百万年薪,但是可以让你掌握更丰富的工具,使得你可以拥有更多的可能性。
篇幅有限,本文只说后端的事儿。
所谓后端,就是服务器端。前端呢?就是用户的浏览器了。浏览器运行在普通的个人电脑上,能干的事情相对有限。大规模的计算如果都需要在浏览器中完成,那么效率必然很低。而且,用户信息存储这样的工作,也需要放到服务器加密集中管理,才能保证安全。
后端开发说白了,就是架设一个服务应用。用户通过浏览器访问你的这个服务,你根据用户提供的输入进行处理,然后把输出的结果反馈给用户的浏览器。
听起来很简单,对吧?没错,这就是标准的冯诺依曼体系结构。
后端开发的技术门槛是如何降低的呢?就是出现了越来越多的开发框架,使得开发者避免了重复发明轮子。你可以把开发框架想象成模具。只需要根据具体需求对模具调整加工,就可以立即生产出符合自己要求的服务应用来。
痛点
本文介绍的开发框架,是基于Python语言的Django,它简单、便捷而强大。
你可以上网搜索到一个叫做"Django Girls Tutorial"的教程。顾名思义,这是专门教女孩儿如何用Django的。

这……是不是性别歧视啊?
不是。因为教育者发现有的女孩子容易受到社会偏见的影响,把IT技术理所当然想象成男孩子才能做的事儿,所以连碰都不去碰,错失了很多接受教育和选择就业的机会。于是他们发起一项运动,通过一系列培训,改变部分女孩子们的这种错误认知。
Django是个非常好的出发点。它足够简单,可以让初学者快速上手,并且做出实用的网站,从而建立对IT学习的信心。

你需要在数据库存储用户信息,可是不会SQL语言?没关系,可以利用框架提供的通用方法操作数据库。
你需要用户提交表单,可是懒得自己写HTML?不要紧,只需要两三行代码框架就能替你完成。
听起来是不是很神奇?是不是打算立即上手试一试?
别急。
如果你没有好的教程指引,仅是搭建Django开发环境这个过程就会很痛苦。太多的教程都没有搞清楚教学对象的需求。教程作者们总是在可能出现问题的环节轻描淡写,导致初学者很容易踏进坑里,然后挣扎半天爬不出来,挫折无助直至放弃。
本教程的特点,就是用清晰的步骤帮助初学者绕开可能的坑,一步步完成开发环境的搭建和试运行,从而建立信心和积累学习实践的成就感。
需要说明的是,因为本人使用的是苹果电脑,本文中演示的都是macOS系统下的步骤。不过我们用到的软件基本上都是跨平台的。如果你使用的是Windows或者Linux,可以选择适合自己操作系统的版本。软件界面环境和操作步骤大同小异。
我们开始吧。
套件
为了最大可能地避免安装软件包带来的麻烦,我建议你安装Anaconda套件。
如果你只是需要进行Web开发,安装Anaconda确实有些大炮轰蚊子的感觉。因为它会一股脑给你安装上很多其他好用(但你可能暂时用不上)的软件包裹。
但是对于现在的计算机来说,这点儿空间占用不算什么大事儿。而且Python作为一种通用开发语言,在你工作生活中许多环节都有可能用得上。Anaconda的软件包管理机制非常便捷易用。一次安装后,你可以长时间享受它带来的各种便利。因此安装该套件利大于弊。
请到这个网址 下载最新版的Anaconda。下拉页面,找到下载位置。根据你目前使用的系统,网站会自动推荐给你适合的版本下载。

请注意,下载页面区隔出左右两栏,分别对应套件不同的Python语言版本。左侧是3.6版,右侧是2.7版。千万不要根据常识,判定3.X版本一定优于2.X版本。不是这样的。请根据你准备使用的具体开发环境来进行选择。如果你是初学者,建议你点击右侧的绿色下载按钮,下载2.7版本。
后文你会看到,对于咱们做Web开发来说,这里套件Python的版本其实没有太大关系。因为在具体开发语言版本,在配置的时候,你完全可以重新自由选择。
下载下来的文件是个以pkg作为扩展名的包裹,双击它,然后根据提示一步步安装就好了。全中文界面,非常友好。

安装完了?
现在你的系统里面就有了全套的Python生态环境了。你完全可以在命令行用pip安装Django,然后在Sublime Text, Atom,甚至是Anaconda自带的编辑器里开始编写Python程序了。
但是我们不仅需要把安装配置变得简单,还要在未来的实际开发中享受更完善便捷的功能。因此,我们需要安装一个集成开发环境(Integrated Development Environment, IDE)。
我们选择的集成开发环境,是PyCharm。
环境
PyCharm是Python开发的利器。它把各种脏活累活默默在后台一手承担,把开发者解放出来。
PyCharm支持macOS,Windows和Linux。一旦你习惯了它的使用方式,那么即使工作环境迁移到其他操作系统,也不会受到很大影响。
你需要到这个地址下载最新版的PyCharm。

下载之后,双击dmg文件。出现如下提示。

安装无非就是把左侧的可执行文件图标拖拽到右侧的“应用”(Applications)目录图标上。

等进度条到头,安装就算完成了。然后你可以在应用目录下找到PyCharm。双击执行即可。首次执行的时候,可能会弹出以下窗口。

这是系统的默认安全提示。别理他,继续打开就好。
当你看到如下图所示的启动界面的时候,安装就成功了。

集成开发环境安装好了。它有什么作用呢?
别着急。下面我们就要展示如何用它来方便地安装Django,并且尝试运行你自己的第一个网站应用了。
安装
PyCharm下安装并且配置Django开发环境,真的如同搭积木一样简单。
首先,我们在开始界面下,执行新建项目(Create New Project)。

然后你会看到如下图所示的界面。

左侧选择Django,右侧的Location填写你打算保存项目文件的目录位置。
目录命名时一定要注意,只能包含字母、数字和下划线。出现其他字符会报错。

我们把其中错误的连接符改成下划线,就可以顺利通过检验了。

下面我们要进行一项非常重要的工作——指定开发用Python版本了。请点击Interpreter这一行最右侧的配置按钮。你会看见以下4个选项:

请选择第4个,Create Conda Env。PyCharm将通知Anaconda:“嘿,老兄,为了实验Django编程,我需要你提供一个虚拟软件环境!”
这里解释一下什么叫做虚拟软件环境。我们在开发的过程中,使用的Python版本、调用的软件包版本可能都是不一样的。例如对项目A,你可能用的是Python 3.6 + Django 1.10,对于项目B,你用的可能是Python 2.7 + Django 1.11。这就很困扰了。因为你可能听过一句谚语“一个人不能同时去追两只兔子”。
对,如果你把开发环境设定为唯一的,那你就需要先装Python 3.6, Django 1.10,测试项目A,测试通过后你删了Python 3.6和Django 1.10,安装Python 2.7,Django 1.11,然后测试项目B。这时你突然发现项目A可能需要改写,加入新的功能,于是你又删除了Python 2.7和Django 1.11……
折腾不折腾啊?
好的软件开发人员,是最不喜欢在这种无谓的细节上瞎耽误工夫的。所以他们做出了虚拟环境。你可以在虚拟环境1里面安装Python 3.6和Django 1.10,专门用于开发项目A。虚拟环境2安装Python 2.7和Django 1.11,用于开发项目B。两个虚拟开发环境虽然都安装在了同一台电脑上,但是相互独立,互不干扰。你可以在它们中间随时方便切换。
强大吧?
PyCharm充分利用了虚拟环境的强大特点。点击Create Conda Env后,软件弹出以下的对话框。

你需要给新建的虚拟开发环境起个名字。就叫django_py27吧。好记!
然后你需要选择一下Python语言版本,我们点开下拉列表看看。

可以看到,各种Python语言的版本一应俱全,任君挑选。
我们确认了选择Python 2.7版本之后,PyCharm就开始为我们搭建指定虚拟环境了。

这个过程可能需要等待一会儿。虚拟环境搭建完毕后,你可以看到Interpreter右侧的路径变成了我们设定的虚拟环境。

点击右下角的Create,让PyCharm自己帮我们安装Django吧。

PyCharm不仅安装了Django,并且在我们指定的路径下搭好了基础框架结构。如下图所示:

下面该干什么呢?我们来尝试一下运行这个初始框架吧。
运行
在PyCharm顶部的菜单栏里,选择Run,会出现以下功能列表:

我们就选择其中的第一个,Run 'django_course'即可。
如果一切正常,你会在PyCharm底部窗口中看到如下提示:

点击其中的蓝色链接,浏览器会开启,并且访问本地已运行的Django App服务。
你会看到如下页面:

正如页面中提示的那样——“It worked!”
祝贺你,已经成功安装和配置了全套的Django开发环境,而且测试运行了自己的第一个Web应用了。
讨论
除了本文介绍的方法外,你还知道哪些其他的Django开发环境便捷搭建方式?你在学习Django的过程中,有什么经验和教训?欢迎留言分享给大家,我们一起交流讨论。
如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。
如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。
延伸阅读
如何用《玉树芝兰》入门数据科学?
数据科学相关文章合集(玉树芝兰)
相关文章:

LeetCode实战:旋转链表
题目英文 Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: Input: 1->2->3->4->5->NULL, k 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2…

blog地址:
blog地址: blog地址: http://blog.csdn.net/q107770540posted on 2010-11-19 08:36 Tim_ 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/q107770540/archive/2010/11/19/1881399.html

Spring MVC框架有哪些优点
Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。 Spring MVC具有如下特点: 是Spring框架的一部分,可以方便的利用Spring所提供的…

MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)
1.數據層使用了SqlSugar 庫類 。 數據層使用了SqlSugar 庫類 ,有興趣的 可以學習 http://www.codeisbug.com/Doc/8/1133,個人覺得比EF 簡單,容易上手,推薦1。 數據層使用代碼生成,所以考慮得比較多。 1.GetAllList()-…

台湾前十大科技公司拼不过三星(往后一点三星都不要买啦!)
台湾前十大科技公司拼不过三星,往后一点三星都不要买啦!本来还可以买它的内存和液晶,不过现在是一点都不能买了,再买就真反了他了! 三星像糖果也像毒药,让台湾LED类股1年涨3倍,但也让鸿海市值一夜之间消失350亿元(新台币,下同)。从来没有一刻…

技术图文:如何利用 C# 向 Access 数据库插入大量数据?
背景 通常我们在做数据分析与处理之前,需要把从网站爬取的数据或者从 甲方 系统中导出的数据存入到自己的数据库中。如果数据量小,直接利用 SQL的 Insert 语句逐条插入就好。可是数据量上万条之后,再利用这样的方法就会奇慢无比,…

Web前端面试自我介绍对话技巧注意事项
大家在学会了web前端技术后,当然是要准备找一个适合自己的web前端工作了,那么面试环节是必不可少的,有一个良好的自我介绍表述,在HR心中也能加分不少,接下来小编就为大家介绍一下Web前端面试自我介绍对话技巧注意事项。…

Android使用ListView控件问题
Android使用ListView控件问题: The application has stopped unexpectedly, please try again。 开发环境:android 1.6 最低兼容 4.0 报错代码如下: main.xml 代码 1 <?xml version"1.0" encoding"utf-8"?>2 <…

技术图文:如何实现 DataTable 与模型类 List 的相互转换?
通常情况下,我们在做工程项目的时候,需要把待处理的数据存储在数据库中。 通过 SQL 的 Select 语句很容易把查询的结果以 DataTable 的方式得到,但在对 DateTable 中的数据进行进一步的检索时远远没有模型类 List<T> 方便。 所以&…

SQL server 基本语句
SQL server数据库基本语句一、实验要求:1、 查询student表中所有学生的信息select * from student如图所示2、查询student表中“姓名”“所在班级”和“成绩”列内容select 姓名,所在班级,成绩 from student如图所示3、查询student表…

Python中if条件判断语句怎么用?
俗话说“不积跬步无以至千里”。学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句。 if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式如下: if判断条件: 满足条件时要做的事情1… 满足条件时要做的事情2…

Arcmap技巧总结
Arcmap技巧总结 1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关。 2. 自动捕捉跟踪工具 点击Editor工具栏中Snapping来打开Snapping Environment对话框 捕捉设置中有3个选项, vertex edge end 分…
Spring Web MVC(一)
概述Spring Web MVC框架的特点五大核心组件编程步骤 五大核心组件DispatcherServlet前端控制器WebApplicationContext中特殊的bean处理过程 HandlerMapping 处理映射Spring中最常用的两个处理器映射BeanNameUrlHandlerMappingSimpleUrlHandlerMapping拦截器HandlerInterceptor概…

技术图文:如何利用BigOne的API制作自动化交易系统 -- 身份验证
背景 最近,自己在技术精进方向上有所犹豫,是往"网络渗透"的方向走呢?还是往"量化交易"的方向走? 如果选择精进“网络渗透”,就需要学习各种Web渗透技术、客户端渗透技术、移动环境渗透技术、社会…

零基础学习java软件开发攻略
Java是主流开发语言,应用普遍。Spring Boot是Java开发时常用框架,有非常丰富的组件和易用的功能。实际开发工作中涉及到的知识点比较多,将它们分门别类,专题攻关,由点到面,学习效率非常高。 软件开发系统学…

Linux--档案/目录 权限及修改
首先所有权限对于三类用户分别设定: User(所有者) / Group(组群) / Others(其他)。 权限也是有三种:Read / Write / eXecute,这三种权限对于文档和目录有不同的意义。 1. 对于文档: Read:可以查看文档的内容 Write&…
sklearn:Python语言开发的通用机器学习库
引言:深入理解机器学习并全然看懂sklearn文档,须要较深厚的理论基础。可是。要将sklearn应用于实际的项目中,仅仅须要对机器学习理论有一个主要的掌握,就能够直接调用其API来完毕各种机器学习问题。本文选自《全栈数据之门》。将向…

资料分享:送你一本《BigONE Developer API V2》电子书!
背景 昨天,我推送了一篇技术图文《如何利用 BigOne 的 API 制作自动化交易系统 – 身份验证》,里面提到了 BigONE Developer API V2。为了方便自己也方便他人,所以把这份文档整理成 PDF。如果大家对封装 BigONE 提供的 API 感兴趣可以下载这…

Web前端培训面试攻略
学会web前端技术之后,接下来就是要找到一份合适的工作,今天小编要跟大家分享的文章是关于web前端面试攻略,做好这些可以给面试环节加分,找到合适的工作几率会更高,希望本篇文章能够对大家有所帮助。 Web前端培训…

微软鲍尔默回应被苹果超越:将开发更好产品
针对苹果超过微软成为全球市值最高的高科技公司的消息,微软首席执行官史蒂夫鲍尔默 (Steve Ballmer)周四表示,其目标是开发更好的产品,提高盈利能力。鲍尔默周四在印度首都新德里说,“我每天思考的是如何改进产品、如何使产品更 具…

技术图文:如何利用C#实现Huffman编码?
背景 Huffman编码 在通信和数据压缩领域具有重要的应用。 在介绍 Huffman 编码具体实现之前,先介绍几个相关的概念。 概念1:树中结点的带权路径长度 – 根结点到该结点的路径长度与该结点权值的乘积。 概念2:树的带权路径长度 – 树中所有…

ELK 5.x日志分析 (二) Elasticserach 5.2 安装
2019独角兽企业重金招聘Python工程师标准>>> 解压安装包到/opt/elasticsearch 目录下面 [roots1-prod-it-web01 opt]# tree -L 1 elasticsearch/ elasticsearch/ ├── bin ├── config ├── lib ├── LICENSE.txt ├── modules ├── NOTICE.txt ├── …

什么样的人适合学习UI?
UI时代的到来,让我们的生活都多姿多彩,很多企业越来越注重UI设计这方面,想要学习UI设计的人也越来越多,暗恶魔什么样的人适合学习UI呢? 什么样的人适合学习UI? 目前的UI设计很多都是停留在手机端设计,网页࿰…

Uva 10074【递推dp】
UVa 10074 题意:求01矩阵的最大子0矩阵。 http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚。先求Largest Empty Interval,枚举每个点为矩形的右下角。 1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<…

金融时报:谷歌撤离中国有99.9%的可能性
据国外媒体报道,英国《金融时报》周六发表文章称,谷歌与中国政府就监管问题的谈判显然陷入僵局,而这家世界最大的搜索引擎关闭中国业务现在有99.9%的可能性。《金融时报》称,谷歌已经制定了关闭中国搜索引擎的详细计划。该报援引一…

技术图文:匿名方法是怎样演变为Lambda表达试的?
背景 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda 表达式基于数学中的 λ演算得名,直接对应于其中的 lambda 抽象(lambda abstraction),是一个匿名函数,即没有函数…

python和c++的相互调用教程
日常工作中会遇到需要python与cpp代码之间的相互调用,工作的应用复杂,都是取决于代码的多少,但是总的方法不变,这里用两个简单例子说明下,有兴趣的筒子可以探讨下~~ 我的测试环境:ubuntu1604,py…

技术图文:如何通过 LINQ 查找集合中的重复数据?
背景 在前几天介绍的 如何利用C#实现Huffman编码? 的图文中有以下代码。 private List<HuffmanTreeNode> CreateInitForest(string str) {if (string.IsNullOrEmpty(str))throw new ArgumentNullException();List<HuffmanTreeNode> result new List&…

mysql的基本知识
安装:http://www.cnblogs.com/sshoub/p/4321640.html 导库 http://www.cnblogs.com/yuwensong/p/3955834.html 报错:Error was: No module named PIL pip install image转载于:https://www.cnblogs.com/baldermurphy/p/7403778.html

msys下产生dll的导入库
有些时候在只有一个dll的情况下,如果需要隐式链接的话,就需要为该dll产生一个导入库.注意导入库是不能跨编译器使用的,在mingw中导入库需要以.a结尾,而vs则以.lib 以下的方法是在Msys产生mingw及vs 的导入库 , 打开MSys工具 首先生成dll库的d…