系列文章目录
第一章 python Web django学习入门之创建人生中第一个django项目
前言
随着开源框架的不断更新迭代,我们也需要时刻保持学习的态度,不然最终会被时代的浪潮拍死在沙滩。不求的技术进步超过1,但不要让你的技能小于1,今天主要讲述 django settings 配置的详细介绍,以及迈出人生第一步 Hello World !!!。
一、django settings 详解?
|-------------------------------------------------------------------------------------------|
|- BASE_DIR: 当前项目工作目录,用来在每一次开启项目时动态找到相关资源路径
|- SECRET_KEY: 加密的hash值以及保护某些签名数据的关键密钥
|- DEBUG: 调试模式 测试环境为True, 生产环境禁止
|- ALLOWED_HOSTS: 有哪些主机或域名可以访问当前django站点,如设置为*代表全部可访问。
|- INSTALL_APPS: django项目中所有使用的应用名称,自创建子应用也要加到这里,不然ORM数据库无法被识别到!
|- MIDDLEWARE: django中间件,用来在request或reponse过程中添加功能,比如确保安全性,传输保存Session等
|-- SecurityMiddleware: xss脚本过滤,一些安全设置
|-- SessionMiddleware: session支持中间件,在每次用户访问django项目时,添加session对每一个浏览器
|-- CommonMiddleware: 通用组件,比如为路由添加末尾斜杠
|-- CsrfViewMiddleware: 防跨站请求伪造令牌,为客户端添加csrf_token密钥,在表单提交时需提交该值
|-- AuthenticationMiddleware: admin用户组件,每个request对象都会被添加admin下的user属性
|-- MessageMiddleware: 消息中间件 展示一些后台消息给前端
|-- XFrameOptionsMiddleware: 防止欺骗点击攻击出现;自身页面被嵌入到他人页面中,点击欺骗
|- ROOT_URLCONF: 主路由配置文件,字符串填写url.py文件路径
|- TEMPLATES: 模板文件配置项
|- WSGI_APPLICATION: WSGI服务器配置项,找到当前django下的wsgi引入APP文件
|- DATABASES: 数据库配置项,默认使用SQLite3,一个本地文件数据库
|- AUTH_PASSWORD_VALIDATORS: 检查用户密码强度的验证程序列表,不过是针对admin界面下的用户,而非自定义
|- LANGUAGE_CODE: django所使用语言文件
|- TIME_ZONE: django所使用时区
|- USE_I18N: 国际化支持 18表示Internationalization这个单词首字母I和结尾字母N之间的字母有18个
|- USE_L10N: 是localization的缩写形式,意即在l和n之间有10个字母
|- USE_TZ:开启了Time Zone功能,则所有的存储和内部处理,包括print显示的时间将是是UTC时间格式
|- STATIC_URL: URL访问静态资源时的路径
|-------------------------------------------------------------------------------------------|
二、迈出人生第一步 Hello world !!
先理解项目与应用的区别?
项目: 则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。 应用: 是一个专门做某件事的网络应用程序 例如: 博客系统,或者公共记录的数据库,或者简单的投票程序 等。
视图函数
打开apps下my_app 子应用中的 views.py文件, web访问起始就是通过一个URL连接地址访问到服务器上的一个函数。 在views.py中我们通过编写函数的形式,接收用户的一个request请求,并返回一个response响应。
from django.http import HttpResponse
def index(request):
return HttpResponse("<h1>Hello World !!</h1>")
路由配置
创建一个可以在请求时返回H1标签的视图函数,但是现在通过浏览器还是访问不到的, 需要我们为这个my_app下的函数进行路由配置, 以达到可以访问的条件。
- 第一种简单的路由配置方式,直接在主控路由url.py文件下(也就是和WSGI.py 平级),配置路由并找到这个视图函数
from django.urls import path
from django.contrib import admin
from apps.my_app import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index)
]
- path(route, view, name) 函数 参数说明?
route: 第一个参数为访问地址,空字符串代表访问时直接访问无需加入路径。(匹配规则,是一个字符串 ) view: 第二个参数代表访问该地址时对应的视图函数,我们引入了apps下my_app 子应用中的 views.py文件中的index视图函数。 name: 未来我们会用到他,用来为匹配规则命名,这样方便日后修改路由而不影响全局下的路由使用
接着访问: http://127.0.0.1:8001/ , 你就会看到你向世界的问候 Hello World !!
路由配置问题
以上将视图函数的查找直接写到主路由并不是最好的办法,因为我们的项目会有非常多的路由配置项,如果都堆到这个主路由文件中肯定是非常臃肿, 杂乱无章,难以维护;
解决办法
- 我们可以给每一个对应的子应用都加上一个 urls.py(统称: 子路由)并在其中设置视图的路由配置, 由它进行一个路由访问。
from django.urls import path
from apps.my_app import views
urlpatterns = [
path('', views.index)
]
- 现在虽然配置了子应用下的路由文件,但是访问时,还是看不到对应视图的结果,
这是因为ur默认的查找动层级是:主路由 ——> 子路由,逐层查找,但我们并没有在主路由进行一个子路由的分发,所以无法访问,现在我们再对主路由进行配置,让主控路由可以找到子应用下的路由
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.my_app.urls')),
]
最后我们再次访问: http://127.0.0.1:8001/ ,如果可以看到的话,那么恭喜你,非常的Nice !!
路由配置下查找匹配层级详解
1. 查找主路由文件下的 urlpatterns 全局变量,这是一个序列数据类型,其中每一个元素都是对应的一个路由匹配规则。 2. 如果在规则中查找到符合匹配规则的,则执行其中的对应执行函数。但是如果对应的不是一个执行函数,而是一个 include() 路由包含,那么截断与此项匹配的 URL 的部分,并将剩余的路由字符串发送到 include所包含的子路由文件中以供进一步处理。 3. 最终如果没有匹配到的任何结果,Django默认抛出 Page not found (404)响应,匹配到则返回对应函数的response。
总结
至此,我们的Hello World项目已经涵盖了Django框架中的部分常用的组件;
路由,视图
那么其中每一部分都还有很多内容等着我们去了解,在接下来的章节中我们会继续详细给大家介绍!
|