Django静态文件配置、form表单与request对象
一、静态文件配置
1.编写一个页面
def login_func(request):
# 1 返回html页面
return render(request, 'login_page.html')
2.静态文件
主要针对html文件所使用的各种资源,不经常变化的资源文件叫做静态文件
-
常见的静态文件
css文件,js文件,img图片文件,插件,模块文件等等
-
所以,在django中针对静态文件资源需要单独开一个目录统一存放
也就是---static目录,该目录下如果各种类型的文件都很多,也可以继续创建目录
└─ static目录
│─ css文件 # 存放css文件
│─ js文件 # 存放js文件
│─ img图片文件 # img图片文件
│─ 插件 # 插件可以放在目录下或者直接放在static中
│─ 模块文件
└─ ...
3.资源访问
我们在网址的地址栏中,之所以基于不同的路由可以获取到相应的资源,是因为网址后端已经开放了接口
4.静态文件资源
默认情况下带有CSS样式、JS动态的html页面无法正常显示出来,因为CSS样式、JS动态这些静态文件资源没有开设开放接口
5.静态文件相关配置
(1)STATICFILES_DIRS
想要让带CSS、JS样式的html页面正常显示出来,需要对静态文件配置
在settings.py
中添加
STATICFILES_DIRS
中存储静态文件资源的目录名称
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static') # 存储静态文件资源的目录名称
]
(2) 接口前缀的含义
STATIC_URL代表着访问静态文件资源的接口前缀
STATIC_URL = '/static/' # 访问静态文件资源的接口前缀(通行证)
接口前缀类似环境变量,接口前缀正确之后,会拿着后面的路径依次去到
STATICFILES_DIRS
列表中自上而下查找静态文件,一旦找到就返回给浏览器(即可让html上加载的资源正常显示出来)
(3)接口前缀的动态匹配问题
当我们更改STATIC_URL = '/static/'
接口前缀为STATIC_URL = '/XXX/'
时,就会出现错误。
由于我们在html页面外链接CSS文件的时候,前缀为/static/
,所以需要重新修改html中的链接,非常麻烦。
- 解决的方法就是使用Django的模版语法,动态来匹配接口前缀
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
这样就算我们修改接口前缀,就不需要在去html文件中一个个更改了,只需要修改STATIC_URL
即可
二、form表单
1.action
属性
action属性控制数据提交的地址
action=""
数据默认提及给当前页面所在的地址
-
action="https://www.baidu.com"
action中填写完整地址,超当前网址提交数据
-
action="/index/"
action中填写路由,超当前服务端的路由提交
2.method
属性
method
属性控制数据提交的方式: GET 和 POST
- GET
朝服务端所要数据,可以携带一些额外的要求(添加限制条件)
携带额外数据的方式:URL?xxx=yyy&uuu=zzz
?问号后面携带数据的大小是有限制的(2kb左右),并且不能携带敏感数据(如:密码)
- POST
朝服务端提交数据
携带额外数据的方式:请求体
请求体携带数据安全性较高并且没有大小限制
-
form表单中要有name属性
-
method要改成post请求
-
前期发送post请求需要注释掉配置文件中的某一行
三、request对象
request是一个对象,在Wsgiref 模块中,把请求数据返回的封装成了大字典
而django在Wsgiref之上将其封装成了request对象
1.request.method
request.method
获取请求方式,得到纯大写的请求名字符串:GET
或者 POST
2.request.POST
-
request.POST
获取post请求请求体里面的数据,QueryDict 字典{'':['']}
request.POST.get()
获取值列表中最后一个字符串request.POST.getlist()
获取整个列表
除了请求体可以携带数据,网址后面也可以携带数据
3.request.GET
拿到URL
后面?
后面携带的数据
request.GET
可以拿到网址URL
后面?
后面携带的数据
-
request.GET.get()
获取值列表中最后一个字符串request.GET.getlist()
获取整个列表
4.视图函数中针对不同的请求代码编写套路
常用套路
if request.method == 'POST':
name = request.POST.get('username')
pwd = request.POSt.get('pwd')
# 初学阶段:后端获取到的前端数据都是字符串
if username == 'jason' and pwd == '123':
return HttpResponse('用户登录成功')
return HttpResponse('用户名或者密码错误')
return render(request, 'login_page.html')
初学阶段:后端获取到的前端数据都是字符