路飞学城Python-Day78
17-静态文件配置1
静态的文件的配置不能直接将CSS、JS文件直接放在templates的文件夹中
要将所有的静态文件放在static的文件夹中,然后配置上静态文件static的路径
要想访问Django这个文件,就必须要使用它的别名去访问
Django就是通过别名路径去找实际的路径
18-静态文件配置2
写项目的时候,不要把JS、CSS文件放在和HTML相同的目录文件里,要把不同的文件放在不同的地方
19-路由控制之简单配置
Django的主体内容就是MTV+控制器,4个部分
为了保证网页浏览的严谨性,需要对网页的路径进行配置,在网页的路由分发处,加上正则表达式,确保路径的唯一性
"""first_pro URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('timer/', views.timer),
path('login/', views.login),
# 路由配置,哪一个路径由哪一个视图函数处理,路由------>视图函数
re_path(r'^articles/2003$', views.articles)
]
from django.shortcuts import render,HttpResponse
# HttpResponse:就是响应对象,响应对象就是一串响应的字符串
# Create your views here.
def timer(request):
import time
ctime = time.strftime('%Y-%m-%d %X', time.localtime(time.time()))
return render(request, "time.html", {"date": ctime})
def login(request):
return render(request, 'login.html')
def articles(request):
return HttpResponse('Hello World')
def ach(request, year):
return HttpResponse('Not a big deal %s' % year)
def mon_ach(request, year, mon):
return HttpResponse('Hello %s-%s' % (year, mon))
注意:
-
若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
-
不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
-
每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义
20-路由控制之有名分组
传参数的时候是按照位置传参数的,关键字传参数可以有效的避免参数传入的时候考虑名称的参数传入
关键字传参数
21-路由控制之分发
22-路由控制之登录验证示例
from django.shortcuts import render,HttpResponse
# HttpResponse:就是响应对象,响应对象就是一串响应的字符串
# Create your views here.
def timer(request):
import time
ctime = time.strftime('%Y-%m-%d %X', time.localtime(time.time()))
return render(request, "time.html", {"date": ctime})
def login(request):
print(request.method)
if request.method == 'GET':
return render(request, 'login.html')
else:
# print(request.GET)
print(request.POST)
user = request.POST['user']
pwd = request.POST['pwd']
if user == 'pandaboy' and pwd == '123':
return HttpResponse('登录成功')
else:
return HttpResponse('登录失败')
def articles(request):
return HttpResponse('Hello World')
def ach(request, year):
return HttpResponse('Not a big deal %s' % year)
def mon_ach(request, month, year):
return HttpResponse('Hello %s-%s' % (year, month))
23-路由控制之反向解析1
做开发的时候会随着变更需求,而不断的去更改url,一旦更改了,之前的函数就会有问题
在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。
在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:
-
在模板中:使用url 模板标签。
-
在Python 代码中:使用from django.urls import reverse()函数
24-流程控制之反向解析2
反向解析的目的就是不写死url,而是利用url的别名机制,取代访问url的路径
25-路由控制之名称空间1
命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回
我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。
26-路由控制之名称空间2
include使用元祖的形式包装名称空间的路径
Win a contest, win a challenge
posted on 2018-09-17 23:07 pandaboy1123 阅读(192) 评论(0) 编辑 收藏 举报