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中的链接,非常麻烦。

image-20221209155236995

  • 解决的方法就是使用Django的模版语法,动态来匹配接口前缀
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">

image-20221209151211045

这样就算我们修改接口前缀,就不需要在去html文件中一个个更改了,只需要修改STATIC_URL即可

image-20221209161447358

二、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请求需要注释掉配置文件中的某一行

image-20221209102430834

三、request对象

image-20221209102956204

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后面?后面携带的数据
image-20221209104334618
  • 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')

初学阶段后端获取到的前端数据都是字符

posted @ 2022-12-09 19:03  Duosg  阅读(102)  评论(0编辑  收藏  举报