zoukankan      html  css  js  c++  java
  • 请求与响应

    一、HttpRequest的常用属性和方法

    二、前端form表单

    在HTML中,form表单的作用是收集标签中的内容,<form>...</form> 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端。

    一个表单必须指定两样东西:

    1. form的method参数用于设置表单的提交方式,默认使用POST.

    2. action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的URL.

     form表单,login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <h1>登录</h1>
        <form action="" method="post">  #action指的是提交地址,不写或者为空代表提交单当前页。method请求方法,默认不写为post请求。收集表单数据,返回给页面
            {% csrf_token %}    #解决403 Forbidden。每一次form表单都要加这个令牌,标签
            <p>用户名:<input type="text" name="username"></p>
            <p>密码:<input type="password" name="password"></p>
            <p><input type="submit" value="登录"></p>
        </form>
    </body>
    </html>

    添加teacher.views

    from django.shortcuts import render,redirect,reverse
    from django.http import HttpResponse,JsonResponse
    from datetime import datetime
    from django.template.loader import get_template
    from teacher.models import Student,Grade,StudentDetail,Course,Enroll
    
    from crm.settings import UPLOAD_ROOT
    from django.db.models import Q
    import os
    
    # Create your views here.
    def index(request):
        students = Student.objects.all()
        arg = {
            '_meta':'aaaa'
        }
        format_str = '%Y-%m-%d %H:%M:%S'
        return  render(request,'teacher/index.html',context={
            'student':students,
            'format_str':format_str
        })
    
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username','')
            password = request.POST.get('password','')
            if username == 'xinlian' and password == '111':
                return  redirect(reverse('teacher:index'))
        return  render(request,'teacher/login.html')

    添加teacher.urls.py

    urlpatterns = [
        path('index/', views.index,name='index'),
        path('login/', views.login),
    ]

    三、前后端交互登录小案例(代码如上面所示)

    如果GET或者POST请求方法中传递两个相同的参数,案例:提交订单时候的爱好

    http://127.0.0.1:8000/teacher/login/?hobby=111&hobby=222

    需要使用getlist方法才能获取到完整数据,使用get方法只能拿到一个数据

    四.文件上传

    1.设置存储路径

    在项目目录的settings.py中添加,在项目目录下添加目录upload

    UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')

     2.前端页面upload.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <h1>上传文件</h1>
        <form action="" method="post" enctype="multipart/form-data">   #表单只有multipart/form-data才能具有上传的功能
    
            <p>请选择需要上传的文件: <input type="file" name="file" multiple> </p>  #name定义的名称传递到后台与后台对应  #mutiple参数说明可以上传多个文件
            <p><input type="submit" value="提交"></p>
            {% csrf_token %}   #post请求都需要验证
        </form>
    
    </body>
    </html>

    后端代码views.py添加

    
    
    from crm.settings import UPLOAD_ROOT #导入响应的路径


    def
    upload(request): if request.method == 'POST': files = request.FILES.getlist('file',None) #使用getlist可以获取相同名称的列表 for file in files: day_dir = datetime.now().strftime('%Y%m%d') #按天获取时间 pre_dir = os.path.join(UPLOAD_ROOT,day_dir) #文件名全路径 if not os.path.exists(pre_dir): #创建当天时间的文件夹 os.mkdir(pre_dir) #确认当前用户是否有权限操作创建文件 filename = os.path.join(pre_dir,file.name) 文件全路径 with open(filename,'wb') as f: #二进制写入 for line in file.chunks(): #文件流 f.write(line) return HttpResponse('上传成功') return render(request,'teacher/upload.html')

    添加url路由

    path('upload/', views.upload,name='upload'),

    程序执行结果:

    五、HttpResponse对象

    ****content为字节类型,图片勘误

     

     实例演示:

    In [1]: from django.http import HttpResponse                                                                                                                                                                          
    
    In [2]: response = HttpResponse('hello')                                                                                                                                                                              
    
    In [3]: response.content                                                                                                                                                                                              
    Out[3]: b'hello'
    
    In [4]: response.charset                                                                                                                                                                                              
    Out[4]: 'utf-8'
    
    In [5]: response = HttpResponse()                                                                                                                                                                                     
    
    In [6]: response                                                                                                                                                                                                      
    Out[6]: <HttpResponse status_code=200, "text/html; charset=utf-8">
    
    In [7]: response.write('hello')                                                                                                                                                                                       
    
    In [8]: response.write('world')                                                                                                                                                                                       
    
    In [9]: response.content                                                                                                                                                                                              
    Out[9]: b'helloworld'
    ---------------------------------------
    In [7]: response.write('你好')  #如果是中文,需要解密
    
    In [8]: response.write('世界')  
    In [9]: response.content.decode('utf-8')   

    JsonResponse实例,只能接受字典

    view.py中添加:

    from django.http import HttpResponse,JsonResponse
    
    def students_api(request):
        sex = request.GET.get('sex')
        sex = int(sex)
        students = Student.objects.values('name','age','sex','phone').filter(sex = sex)
        students = list(students)
        res = {'data':students}  #JsonResponse只接收字典类型
        return JsonResponse(res)

    url.py中添加:

    path('get_student/', views.students_api,name='students_api'),

    url页面手动传参:

    http://127.0.0.1:8000/teacher/get_student/?sex=1

    结果如下:

  • 相关阅读:
    Android基础TOP4:Tost的使用
    Android基础TOP3_1:纵横屏切换
    Android基础TOP3:线性布局的特点,常用属性,及权重值
    Android基础TOP3:Activity的线性,相对,帧和表格布局的概括
    Android基础TOP2:单机按钮改变字体颜色
    Android基础TOP2_1:输出系统时间
    Python
    Linux-部署ftp
    Linux-部署mysql
    Python-创造百万条数据库数据
  • 原文地址:https://www.cnblogs.com/taoge188/p/10508133.html
Copyright © 2011-2022 走看看