第二章 python Web django学习入门之settings 配置详解,路由详解,响应数据 !

系列文章目录

第一章 python Web django学习入门之创建人生中第一个django项目

文章目录

  • 系列文章目录
  • 前言
  • 一、django settings 详解?
  • 二、迈出人生第一步 Hello world !!
    • 先理解项目与应用的区别?
    • 视图函数
    • 路由配置
    • 路由配置问题
      • 解决办法
      • 路由配置下查找匹配层级详解
  • 总结



前言

随着开源框架的不断更新迭代,我们也需要时刻保持学习的态度,不然最终会被时代的浪潮拍死在沙滩。不求的技术进步超过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响应。

# 每一个视图函数都需要有一个必须参数 request,用来接收用户访问时的请求内容 
# HttpResponse函数向用户返回一个字符串
from django.http import HttpResponse 
def index(request): 
	return HttpResponse("

Hello World !!

"
)

路由配置

创建一个可以在请求时返回H1标签的视图函数,但是现在通过浏览器还是访问不到的,
需要我们为这个my_app下的函数进行路由配置, 以达到可以访问的条件。

  1. 第一种简单的路由配置方式,直接在主控路由url.py文件下(也就是和WSGI.py 平级),配置路由并找到这个视图函数
# my_project/urls.py 
from django.urls import path
from django.contrib import admin
from apps.my_app import views


urlpatterns = [
    path('admin/', admin.site.urls),   # admin控制界面路由
    path('', views.index)
]

  1. path(route, view, name) 函数 参数说明?
    route: 第一个参数为访问地址,空字符串代表访问时直接访问无需加入路径。(匹配规则,是一个字符串 )
    view: 第二个参数代表访问该地址时对应的视图函数,我们引入了apps下my_app 子应用中的 views.py文件中的index视图函数。
    name: 未来我们会用到他,用来为匹配规则命名,这样方便日后修改路由而不影响全局下的路由使用

接着访问: http://127.0.0.1:8001/ , 你就会看到你向世界的问候 Hello World !!
第二章 python Web django学习入门之settings 配置详解,路由详解,响应数据 !_第1张图片


路由配置问题

以上将视图函数的查找直接写到主路由并不是最好的办法,因为我们的项目会有非常多的路由配置项,如果都堆到这个主路由文件中肯定是非常臃肿, 杂乱无章,难以维护;

解决办法

  1. 我们可以给每一个对应的子应用都加上一个 urls.py(统称: 子路由)并在其中设置视图的路由配置, 由它进行一个路由访问。
# my_project/apps/my_app/urls.py
from django.urls import path
from apps.my_app import views

urlpatterns = [
    path('', views.index)
]

  1. 现在虽然配置了子应用下的路由文件,但是访问时,还是看不到对应视图的结果,
    这是因为ur默认的查找动层级是:主路由 ——> 子路由,逐层查找,但我们并没有在主路由进行一个子路由的分发,所以无法访问,现在我们再对主路由进行配置,让主控路由可以找到子应用下的路由
#my_project/urls.py 
from django.contrib import admin 
from django.urls import path, include 


# 通过include()函数引用其它url confs 
urlpatterns = [ 
	path('admin/', admin.site.urls), 
	path('', include('apps.my_app.urls')),  # apps.my_app.urls 相当于apps/my_app/urls.py
	
]

最后我们再次访问: http://127.0.0.1:8001/ ,如果可以看到的话,那么恭喜你,非常的Nice !!

路由配置下查找匹配层级详解

1. 查找主路由文件下的 urlpatterns 全局变量,这是一个序列数据类型,其中每一个元素都是对应的一个路由匹配规则。
2. 如果在规则中查找到符合匹配规则的,则执行其中的对应执行函数。但是如果对应的不是一个执行函数,而是一个 include() 路由包含,那么截断与此项匹配的 URL 的部分,并将剩余的路由字符串发送到 include所包含的子路由文件中以供进一步处理。
3. 最终如果没有匹配到的任何结果,Django默认抛出 Page not found (404)响应,匹配到则返回对应函数的response。

总结

至此,我们的Hello World项目已经涵盖了Django框架中的部分常用的组件;

路由,视图

那么其中每一部分都还有很多内容等着我们去了解,在接下来的章节中我们会继续详细给大家介绍!

你可能感兴趣的:(python,Django,django)