Django之初始庐山真面目
Django可以说是基于Python语言的一款非常成熟的框架,其功能之强大,应用之广泛,开发之便捷,可以说每一个细节都值得一赞
最重要的是,Django其实是我们学习Python过程中非常重要的部分之一,可以说Django学会70%那么找工作应该是不在话下了,学会80%找一份不错的工作是可以了,学会90%找一份满意的工作就足够了!
当然学习Django也不能太过激进,一夜之间并不能学会,也是靠之后慢慢研究,细心钻研,才能有更多更好的收货
现阶段先明白Django的运作原理,是首当其冲的任务.
在开始之前,请在心中默念3次我们的口号:
Django要学会,对得起学费
Django要学好,工作不难找
Django要学精,工资决不轻
---------------------------Let's Go---------------------------
那么请跟着我,咱们来一探Django的庐山真面目(基本运作原理):
Django的基本运作原理并不难,但是前提你要先理解什么是"请求","接收","响应","返回"这里说的有点啰嗦,但是也一定要强调这些,理解了它们,再去学Django,那就是平步青云,行云流水
"请求":由客户端向服务器端发起"请求"
"接收":服务器端收取客户端发来的"请求"
"响应":服务器端对"接收"来的客户端"请求"进行处理
"返回":由服务器端向客户端发起"返回"
以上就是简单的概念,再之后的讲解中会逐一击破!
Django就是基于这四点要素进行运作的,客户端就是PC上的浏览器,向服务器发起一个访问请求,服务器收到访问请求之后,找到客户端想要访问的页面,将页面进行处理返回给客户端(如图)
怎么样,是不是理解起来并不难,有了初步的概念就可以往下进行了,可是等到了实际应用起来就会绕来绕去,自己把自己弄得稀里糊涂
---------------------------废话不多说Django项目走一遭---------------------------
首先要先有一个Django模块,这里就不做过多的阐述了
使用命令创建Django:
django-admin startproject sitename
这里一定要注意,你想将Django创建在哪个目录就一定要在该目录下执行上述命令
当然如果你不想记住这些繁琐的命令,你也可以使用pycharm内置的创建Django项目功能,来创建,但这个功能的内部实际上也是又命令完成的,只不过它帮你自动完成了,你感知不到
一点创建,pycharm就会为我们创建自己的Django项目了并且还会帮我打开
刚刚见到新的Django项目是否一脸懵逼状呢?别慌别懵逼,龙哥带你开飞机:
与项目同名的目录:工程目录-用于存放配置文件,路由文件等相关
__init__.py:
项目工程目录加载时执行的py脚本,可以用于更改环境变量等等
settings.py:
项目配置文件,这个文件老厉害了,如果没有这个文件整个Django项目运行就会崩溃,甚至说根本无法运行,配置文件在接下来会重点说一下
urls.py:
Django的路由文件,利用正则解析URL地址得到匹配的,视图函数(稍后会着重)
wsgi.py:通讯协议配置文件,在settings.py中WSGI_APPLICATION配置指向这个文件,而这个文件默认是使用get_wsgi_application来调用WSGI协议
settings:WSGI_APPLICATION = 'project.wsgi.application'
wsgi:application = get_wsgi_application()
template文件夹:
用于存放可以被渲染的模板文件(html文件)
manager.py:
顾名思义这里Django的管理文件,用于执行对Django项目的操作,比如新建app,建立moudels等
之后再研究一下settings.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))):
和咱们平时写代码一样一样的,首先我要拿到我当前项目所在的绝对路径,这里就是拿到项目的绝对路径
SECRET_KEY:
提供算法的随机字符串(暂时不知道用途)
DEBUG:
是否启用调试模式,如果是True的话,页面报错会将错误信息打印在页面中,如果是False的话,错误信息不回打印到页面中,而如果页面出错,则会弹出Django默认的错误页面
ALLOWED_HOSTS=[]:
绑定域名,如果不使用此域名,是无法访问的
INSTALLED_APPS:
所注册的应用,如果有新创建的app,必须在此处进行注册,才可以进行后续的models操作
MIDDLEWARE:
所注册的中间件,这里就是在请求到达视图函数之前,所需要经历的所有中间件
ROOT_URLCONF= 'StudentManager.urls':
根路由文件指向,当Django需要路由指向时,会读取这个参数
TEMPLATES:
模板相关配置,这里面关注DIRS就可以了,它是Django识别模板目录的配置
'DIRS': [os.path.join(BASE_DIR, 'templates')],
templates刚才咱们再上边说过它是默认的模板路径
WSGI_APPLICATION = 'StudentManager.wsgi.application':
当前Django项目所使用的WSGI
DATABASES:
数据库配置(字典),这里面关注一下'default'(字典),它是用于配置Django所连接的数据库,default是链接名称,在Django项目中可以连接多个数据库.这里字典中的Key其实就是咱们在pymysql.connect中传入的参数:
'mysqlDB': {
'ENGINE': 'django.db.backends.mysql',数据库驱动
'NAME': "students",数据库名称
'USER': "root",数据库用户名
'PASSWORD': "",数据库密码
'HOST': "127.0.0.1",数据库所在服务器地址
'PORT': 8000,数据库服务器端口
}
数据库配置
AUTH_PASSWORD_VALIDATORS:看名字就知道,这个是用来做密码验证的。
比如当你运行mange.py createsuperuser 时,输入的密码必须满足以上的条件。
LANGUAGE_CODE = 'en-us'
语言
TIME_ZONE = 'UTC'
时区
USE_I18N = True
是否国际化
USE_L10N = True
是否本地化
STATIC_URL:
映射到静态文件的URL路径,一般咱们默认为"/static/"
STATICFILES_DIRS:
元组类型,这里面存放的每一个元素都是URL路径用于,放各个app的static目录及公共的static目录,这里一定要在每个元素的后面加上","否则会报错的
今后的项目中,每一个APP中都要有一个static,都要配置到STATICFILES_DIRS中
很重要,不能错,怎么记?
静态文件们的目录们
还有一个尤为重要的文件跟路由配置文件urls.py
settings文件中已经提到了一个配置ROOT_URLCONF,跟路由,这个文件就是配置中的指向
urlpatterns:
url(r'^index$', views.index),
这个列表中存放着多个url函数,url函数里面是什么,regex,view
这样的话,我们就可以理解为,url帮我们做的事情,就是当匹配到某字符串之后,执行某方法
当然这里还有regex,view,kwargs,name参数,我们来逐一看一下
regex,正则表达式
view,视图函数
kwargs,看起来是一个字典,没错这里面是额外参数,但是在你的视图函数中需要一个**kwargs来接收,否则会在抛出来一个,异常参数的错误
name,视图函数匿名,可以在模板中使用{% url "name" 参数 %}的方式来调用URL,这种调用url的方式可以有效避免掉一些恶意产生的"死地址",这种死地址可能会造成页面的崩溃
接下来,看一下:regex中的正则匹配方式:
第一种,标准规范化的单一路由对应
url(r'^index$', views.index),
第二种,正则参数url路由
url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
第三种,正则外的参数
url(r'^index/$', index.Index.as_view(),{"name":"sb"}),
第四种,匿名url
url(r'^index/$', index.Index.as_view(),name="a")
第五种,匿名反向URL
1.url(r'^index/$', index.Index.as_view(),name="a")
{% url "a" %}
reverse("a")
2.url(r'^index/(\w+)/$', index.Index.as_view(),name="a")
{% url "a" 1 %}
reverse("a",args=(123,))
3.url(r'^index/(?P<name>\w*)/(?P<id>\w*)', index.Index.as_view(),name="a"),
{% url "a" 1 %}
reverse("a",kwargs={"name":"a","id":"b"})
匿名反向url
路由分发:
url(r'^social/', include("Social.urls")),
但凡遇到social/的url被正则匹配到,都要去Social.urls中,进行重新定向
但是这里要注意的是,social已经被匹配走了,剩下的就是social/之后的内容
如:social/this/ 被定向到 Social.urls 中,就剩下了this/,所以在匹配时应注意
Django之初始庐山真面目的更多相关文章
- Django(一)初始
一:Web开发中的基本术语 1.两种架构 (1)cs架构 Client/Server:客户端-服务端架构 优点:CS能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后在提交给服务器,用户体验好 ...
- django 的初始项目结构
2.创建Django项目 root@dev:shiyanlou_project# workon syl (syl) root@dev:shiyanlou_project# cd /aaa/shiy ...
- Ubuntu16.04 apache2 wsgi 部署django
在Ubuntu16.04上部署django其实还算简单直观,最重要的问题就是路径设置正确,并且保证版本统一,这个测试是在 Apache/2.4.18 (Ubuntu) apt-get install ...
- 《玩转Django2.0》读书笔记-Django配置信息
<玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...
- django项目settings.py的基础配置
一个新的django项目初始需要配置settings.py文件: 1. 项目路径配置 新建一个apps文件夹,把所有的项目都放在apps文件夹下,比如apps下有一个message项目,如果不进行此项 ...
- django mysql 数据库配置
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库. DATABASES = { 'default': { 'ENGINE': 'django.db. ...
- ubuntu python apache2 wsgi django框架
在ubuntu上通过apatch2和wsgi部署django (亲手做过!!!) 一,我的python.django.apatch2版本: python:python -V 2.7.3 django: ...
- Django ORM 操作 必知必会13条 单表查询
ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...
- 从Runoob的Django教程学到的
Windows 10家庭中文版,Python 3.6.4,Django 2.0.3 这个月开始学习Django,从网上找到了RUNOOB.COM网站找到了一份Django教程,在“认真”学习之后,初步 ...
随机推荐
- Alpha阶段个人贡献分及转会人员确定
请各个团队协商确定个人贡献分,评分根据之前个团队确定的规则进行.每个团队的个人贡献分总数为50*N,N为团队的人数. 个人贡献分要求:必须是一个自然数,每个人分数互不相同,并且和为50*N. 请各个团 ...
- Linux内核分析作业 NO.2
操作系统是如何工作的 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...
- 2013337朱荟潼 Linux&深入理解计算机系统第七章读书笔记——链接
第七章--链接 0.总结 链接编译时可以采用静态链接或动态链接. 连接器主要任务:符号解析和重定位. 多个目标文件可定义相同的符号,可以被连接到一个单独的静态库. 链接器可以生成部分链接的可执行文件 ...
- php插入中文数据到MySQL乱码
事情是这样的:我在本地的测试成功了,放到服务器测试,发现服务器的数据库里的中文竟然乱码了. 我进行了以下几步基本的做法: PHP文件改为utf-8的格式. 加入header("Content ...
- 第八周PSP(11.5--11.9)
2016.11.5 2016.11.6 2016.11.7 2016.11.8 2016.11.9
- 各组Beta版本发布点评
1. 新蜂:俄罗斯方块 俄罗斯方块已经基本完成了所有功能,运行流畅,也加入了之前用户期待的即将降落的方块和游戏积分的功能,用户还能随时暂停和继续游戏. 2. 天天向上: 连连看游戏 连连看游戏在核心 ...
- 【设计模式】—— 备忘录模式Memento
前言:[模式总览]——————————by xingoo 模式意图 这个模式主要是想通过一个对象来记录对象的某种状态,这样有利于在其他需要的场合进行恢复. 该模式还有跟多可以扩展的地方,比如可以记录多 ...
- 【Luogu1344】追查坏牛奶(最小割)
[Luogu1344]追查坏牛奶(最小割) 题面 洛谷 题解 裸的最小割,但是要求边的数量最小. 怎么办呢?给每条边的权值额外加上一个很大的值就了. #include<iostream> ...
- 洛谷 P4070 [SDOI2016]生成魔咒 解题报告
P4070 [SDOI2016]生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 \(1\).\(2\) 拼凑起来形成一个魔咒串 \([1,2]\). 一个魔咒 ...
- POJ 3159 Candies (图论,差分约束系统,最短路)
POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...