静态文件显示配置
- 在项目根目录下创建一个static目录
- 在settings.py中写上
STATIC_URL = '/static/'
# /static/代表页面去访问的地址
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
# 这里的static代表它在你项目中的路径
- 去访问static下的文件
/static/12.txt
正则匹配
普通的路径匹配
path('index/', views.index),
# 当请求/index/路径,就会被index/给匹配,去执行index这个视图函数
# 如果我想匹配/index/下的任意数字,都想被index函数去执行,就没法办到了
正则匹配
from django.urls import path, re_path
from app01 import views
urlpatterns = [
re_path('index/\d\d\d/', views.index),
]
使用正则表达式进行路径匹配
我去访问/index/123/
/index/234/
都会被index/\d\d\d/进行成功匹配
从而去执行index函数
正则匹配之无名分组
如果在index函数中,我想接收所匹配的内容,就需要要使用到分组匹配
re_path('index/(\d\d\d\d)/', views.index),
将(\d\d\d\d)匹配的值,传递给index函数,那么index函数就要进行接收
def index(request, year):
print(year)
return HttpResponse('index')
由于是无名分组,这里index函数的接收参数,可以随便写
正则匹配之有名分组
re_path('book/(?P<m>\d\d)/', views.book),
将(?P\d\d)匹配的内容以m的关键字传递给book这个函数,那么book这个函数的参数必须是m
def book(request, m):
print(m)
return HttpResponse('月份')
给视图函数传参
from django.urls import path, re_path
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^article/(?P<nid>\d+)/', views.index, {'name': '张四'}),
re_path(r'^article/(?P<nid>\d+)/', views.index, {'name': '张三'}),
path('article/12/', views.index, {'name': '张五', 'nid': 12})
]
多个app的路由分发
使用include进行路由分发
re_path('^app01/', include('app01.urls')), # /app01/index/
re_path('^app02/', include('app02.urls')), # /app02/index
比如我请求/app02/index,先被^app02/匹配上, 把我的请求导向到include('app02.urls'))
登录验证
def login(request):
# 获取get请求参数用这个
# name = request.GET.get('name')
# pwd = request.GET.get('pwd')
# print(name, pwd)
# 获取post请求参数用这个
name = request.POST.get('name')
pwd = request.POST.get('pwd')
print(name, pwd)
if name == 'fengfeng' and pwd == '1234':
return redirect('/app01/index/')
return render(request, 'login.html')
返回三剑客 render 返回一个页面
return render(request, 'index.html') # index.html是在templates中的路径
HttpResponse 返回字符串
return HttpResponse("hello world") # 直接写要返回的字符串
redirect 重定向到一个地址
return rediect('/login/') # 直接写跳转的路径,
# 如果使用了include,也要补全app的路径