随笔 - 149,  文章 - 0,  评论 - 0,  阅读 - 11926

【静态文件配置】

复制代码
 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

 

 

 

posted on   认真的六六  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示