#偷偷的转载一下:http://www.cnblogs.com/feixuelove1009/p/8403624.html
# Django是由Python编写的Web框架,依赖Python环境,所以需要提前安装好Python解释器。
# 关于Python的安装,请参考站点中Python教程的相关部分,这里不再赘述。
# 建议安装最新版本的Python3,因为从Django2.0开始将不再支持Python2.7。
# 当前Python最新版本为3.6.3,安装完毕后,会自动安装pip工具包。
# 进行Python + Django的Web开发,最佳IDE环境是Pycharm,请大家自行安装。
# 当前时间点2017年10月,Django对Python版本的依赖关系如下表所示:
# jango 版本 Python 版本
# 1.8 2.7, 3.2 (until the end of 2016), 3.3, 3.4, 3.5
# 1.9, 1.10 2.7, 3.4, 3.5
# 1.11 2.7, 3.4, 3.5, 3.6
# 2.0 3.4, 3.5, 3.6
# 2.1 3.5, 3.6, 3.7
#——————————————————————————————————————————————-#
# Pycharm本身安装Django就很方便了
# 具体路径为File-->Settings-->Project-->+-->[搜索Django]-->Inatall
# 1.先配置一个应用文件:Terminal-->python manage.py startapp apps
# 2.app里的view加代码写视图文件
# 3.qpp里新建url.py文件,写自己应用的路由文件:
# from django.conf.urls import url
# from . import views
# urlpatterns = [
# url(r'^$',views.index,name = 'index'),
# ]
# 4.主文件url里新建和应用有关的路由文件
# urlpatterns = [
# url(r'^polls/',include('polls.urls')),--->我是新增的
# url(r'^admin/',admin.site.urls),
# ]
# 稍微底层:nclude语法相当于多级路由,它把接收到的url地址去除前面的正则表达式,
# 将剩下的字符串传递给下一级路由进行判断。在路由的章节,有更加详细的用法指导。
# include的背后是一种即插即用的思想。
# 项目根路由不关心具体app的路由策略,
# 只管往指定的二级路由转发,实现了应用解耦。
# app所属的二级路由可以根据自己的需要随意编写,
# 不会和其它的app路由发生冲突。app目录可以放置在任何位置,而不用修改路由。这是软件设计里很常见的一种模式。
# 建议:除了admin路由外,尽量给每个app设计自己独立的二级路由。
# 好了,路由设置成功后,
# 启动服务器,然后在浏览器中访问地址http://localhost:8000/polls/。
# 一切正常的话,你将看到“Hello, world. You’re at the polls index.”
#——————————————————————————————————————————————-#
# url()方法:
# url()方法可以接收4个参数,其中2个是必须的:regex和view,以及2个可选的参数:kwargs和name。
# regex:
# regex是正则表达式的通用缩写,它是一种匹配字符串或url地址的语法。Django拿着用户请求的url地址,
# 在urls.py文件中对urlpatterns列表中的每一项条目从头开始进行逐一对比,
# 一旦遇到匹配项,立即执行该条目映射的视图函数或下级路由,其后的条目将不再继续匹配。
# 因此,url路由的编写顺序非常重要!
# 需要注意的是,regex不会去匹配GET或POST参数或域名,
# 例如对于https://www.example.com/myapp/,regex只尝试匹配myapp/。
# 对于https://www.example.com/myapp/?page=3,regex也只尝试匹配myapp/。
# 如果你想深入研究正则表达式,可以读一些相关的书籍或专论,
# 但是在Django的实际应用中,你不需要多高深的正则表达式知识,
# 在Python教程部分有正则表达式相关专题,可供学习参考。
# 当URLconf模块加载的时候会预先编译正则表达式,因此它的匹配搜索速度非常快,你通常感觉不到。
# view:
# view指的是处理当前url请求的视图函数。当正则表达式匹配到某个条目时,
# 自动将封装的HttpRequest对象作为第一个参数,正则表达式“捕获”到的值作为第二个参数,
# 传递给该条目指定的视图view。如果是简单捕获,那么捕获值将作为一个位置参数进行传递,
# 如果是命名捕获,那么将作为关键字参数进行传递。
# kwargs:
# 任意数量的关键字参数可以作为一个字典传递给目标视图。
# name:
# 对你的URL进行命名,让你能够在Django的任意处,尤其是模板内显式地引用它。
# 这是一个非常强大的功能,相当于给URL取了个全局变量名,不会将url匹配地址写死。
# url()方法的四个参数,每个都非常有讲究,这里先做基本的介绍,在后面有详细的论述。