【静态文件配置】
1 1.编写一个用户登录页面 2 ---------------------------------------------------------- 3 4 2.静态文件 5 不怎么经常变化的文件 主要针对html文件所使用的到的各种资源: 6 css文件、js文件、img文件、第三方框架文件!!! 7 --------------------- 8 django针对静态文件资源需要单独开设一个目录统一存放!!! 9 static目录, 该目录下如果各种类型的文件很多, 还可以继续创建目录 10 css目录 11 js目录 12 img目录 13 第三方插件文件目录(可以用utils目录/plugins目录/libs目录/others目录/或者不创就放在static目录下) 14 ------------------------------------------------------------ 15 16 3.资源访问 17 我们在地址栏中之所以可以输入路由获取到相应的资源!!! 18 是因为程序员提前开设了资源的接口!!! 19 ------------------------------------------------------------ 20 21 4.静态文件资源访问 22 默认情况下无法访问!!! 23 因为我们没有提前开设静态文件资源的访问接口!!!
1 view.py 2 3 def login(request): 4 # 返回一个登录页面 5 ''' 6 get请求和post请求应该有不同的处理机制 7 :param request:请求相关的数据对象,里面有很多简易的方法 8 :return: 9 ''' 10 if request.method == "GET": 11 # 点击一次,触发一次 12 print('我是get请求登录页面') 13 # 获取当前请求方式,并且返回的全是大写的字符串形式 14 # print(request.method) 15 return render(request, "login.html") 16 elif request.method == "POST": 17 print('我是post请求登录页面') 18 return HttpResponse("看到了post请求") 19 20 21 ======================================== 22 html代码 23 24 <!DOCTYPE html> 25 <html lang="en"> 26 <head> 27 <meta charset="UTF-8"> 28 <title>Title</title> 29 <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css"> 30 {# 如果想要页面正常,这点令牌static改成xxx#} 31 <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script> 32 {# 如果需要修改某一处令牌,千万不要直接在上面改,那样是全局的,用以下魔法方法#} 33 {# 能够实时的解析到setting.py中的STATIC_URL配置,并且能够实时更新#} 34 {# {% load static %}#} 35 {# <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">#} 36 {# <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>#} 37 </head> 38 <body> 39 <h1 class="text-center">登录</h1> 40 </body> 41 </html>
.明明导了本地的bootstrip的文件,为什么网页上面样式没了??
在浏览器中输入url能够看到对应的资源,是因为后端提前开设了该资源的接口
如果访问不到资源,说明后端没有开设该资源的接口
开设接口方式一:
补充:浏览器清除缓存
。
。
【request请求方法】
(form表单细节介绍)
1 action 控制数据提交的地址!!! 2 有三种: 3 1.action="" 数据默认提交给当前页面所在的地址 4 2.action="https://www.baidu.com/" 完整地址 5 3.action="/index/" 朝当前服务端的路由index地址提交,比如本地的ip与端口是127.0.0.1:8988 那么action="/index/" 实际上就是 action="http://127.0.0.1:8988/index/" 6 ------------------------------------------------------ 7 method 控制数据提交的方法 8 默认是get 9 可以改post 10 ------------------------------------------------------ 11 请求方法补充 12 get请求: 13 朝服务端索要数据,也可以携带一些额外的要求!!! 14 携带额外数据的方式: URL?xxx=yyy&uuu=zzz 15 问号后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据(比如密码等) 16 -------------------------------------------------------- 17 post请求: 18 朝服务端提交数据 19 携带额外数据的方式: 请求体 20 请求体携带数据安全性较高并且没有大小限制!!! 21 --------------------------------------------------------- 22 form标签里面的子标签必须要有name属性,不然GET请求都发不出去!!! 23 24 25 --------------------------------------------------------- 26 前期发送post请求需要注释掉配置文件中的某一行 27 MIDDLEWARE = [ 28 'django.middleware.security.SecurityMiddleware', 29 'django.contrib.sessions.middleware.SessionMiddleware', 30 'django.middleware.common.CommonMiddleware', 31 # 'django.middleware.csrf.CsrfViewMiddleware', # 要把这行注掉!!! 32 'django.contrib.auth.middleware.AuthenticationMiddleware', 33 'django.contrib.messages.middleware.MessageMiddleware', 34 'django.middleware.clickjacking.XFrameOptionsMiddleware', 35 ]
form标签里面的子标签input标签必须要有name属性,不然GET请求都发不出去!!!
name是字典的键,你写在输入框里面的就是键对应的值
method 属性不写默认就是GET 当给input标签添加过name属性后
点一下登录按钮后,可以看到网址变成了http://127.0.0.1:8988/login/?name=jason&pwd=123 就会以这种方式把数据name=jason&pwd=123发送到当前的这个http://127.0.0.1:8988/login/ 地址上去
问号?后面的东西不属于路由,不影响路由的匹配!!路由还是/login
post请求报错
显示权限不够,怎么解决?想发送post请求,必须要在settings.py里面注一行代码!!!
'django.middleware.csrf.CsrfViewMiddleware' 这行代码注掉就行了
。
问题
现在数据已经可以正常的发送到后端去了!!!
要想办法在后端视图函数处获取到用户发过来的数据!!!
如果发过来的是get请求,给浏览器返回html页面!!!
如果发过来的是post请求,想办法获取发送过来的数据!!!
(request对象)
request是一个对象,该对象经过了两层封装,
第一层是wsgiref把原来的socket代码通过tcp流式协议收到的请求数据data封装成大字典了!!
第二层封装是django将大字典封装成了对象!!
1 补充: 2 form标签里面的input标签必须要有name属性,不然GET请求都发不出去!!! 3 4 而且注意当name只是input标签里面的一个属性名,真正重要的是name=后面的东西比如pwd或username这些才是真正的属性!!! 5 request.POST()拿到的字典里面就是比如pwd或者username这些name=后面的属性作为的键! 6 用户在输入框里面写的数据按submit按钮提交后就会变成字典里键对应的值!!! 7 ---------------------------------------------------------------------- 8 request.method 获取当前请求方式 结果是纯大写的字符串数据!!! 9 GET\POST 10 ------------------------------------------------------- 11 request.POST 获取post请求请求体里面携带的数据!!! 12 request.POST.get() 获取列表最后一个数据值!!!!! 13 request.POST.getlist() 获取整个列表数据 14 15 getlist() 方法尤其适用于select下拉框标签,当用户在前端选择了多个数据提交后,post请求体里面是多个值,此时如果用get()就只能拿到列表最后一个数据值了,但是我们肯定要的是整个列表里面的数据,所有这种情况下必须要用getlist()方法了!!! 16 ------------------------------------------------------ 17 request.GET 获取网址问号后面携带的数据 18 注意:无论你是什么请求post请求也一样 都拿的是获取网址问号后面携带的数据 19 ----------------- 20 request.GET.get() 获取列表最后一个数据值!!!!! 21 request.GET.getlist() 获取整个列表数据 22 ------------------------------------------------------ 23 """ 24 在视图函数中针对不同的请求代码编写套路 25 if request.method == 'POST': 26 return HttpResponse() 27 return HttpResponse() 28 """ 29 -------------------------------------------------- 30 def login_func(request): 31 # print(request.method) 32 if request.method == 'GET': 33 # 1.返回html页面 34 return render(request, 'login_page.html') 35 elif request.method == 'POST': 36 # 获取post请求的请求体里面的数据 37 print(request.POST) 38 name = request.POST.get('name') 39 pwd = request.POST.get('pwd') 40 print(name, type(name), pwd, type(pwd)) 41 return HttpResponse('数据我收到了!!!')
当在浏览器里面先输入网址,可以看到打印了get
当点击用户登录按钮后,可以看到打印了post
request.method 可以获取当前请求方式 结果是纯大写的字符串数据!!
当我们在视图函数里面加各判断后,就可以根据收到的请求方式的不同,返回不同数据
get请求返回html页面 post请求返回字符串 数据我收到了!!!
现在一个视图函数就可以处理两种请求方式了!!!
。
。
.get()方法是获取值列表里最后一个数据值!!!
可以看到当我们设置了3个input标签后且属性名name都一样后,3个输入框里面的输入的用户名都被request.POST方法拿到放到键name对应的值列表里面了!!!
但是用request.POST.get('name') 拿到的只是列表里面最后一个数据值jerry
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?