慕课网学习六

request对象属性

通过request.path 方式对当前访问的页面进行标记

<li {% if request.path == '/' %}class="active"{% endif %}><a href="{% url 'index' %}">首页</a></li>
    <li {% if request.path|slice:'7' == '/course' %}class="active"{% endif %}>
    <a href="{% url 'course:course_list' %}">
        公开课<img class="hot" src="{% static 'images/nav_hot.png' %}">
    </a>
    </li>
    <li {% if request.path|slice:'12' == '/org/teacher' %}class="active"{% endif %}>
        <a href="{% url 'org:teacher_list' %}">授课教师</a>
    </li >
        <li {% if request.path|slice:'9' == '/org/list' %}class="active"{% endif %}>    #访问网页,url前面9个字符为'/org/list',该授课机构就会被标记(绿色)
        <a href="{% url 'org:org_list' %}">授课机构</a>
        </li>

request.path  可以获取当前访问页面的相对url比如“http//:127.0.0.1:8000/org/list/”,则request.path  就是“/org/list/”<l{% if request.path|slice:'9' == '/org/list' %}class="active"{% endif %}>    #访问网页,url前面9个字符为'/org/list',该授课机构就会被标记(绿色).slice为模板语言切分的过滤器,/也是一个字符利用这种模板语言设置可以达到全局的“active”效果,而不用每个子页面都要去设置“active”了

request对象的属性

request.scheme :代表请求的方案,http或者https

request.path :请求的路径,比如请求127.0.0.1/org/list,那这个值就是/org/list

request.method :表示请求使用的http方法,GET或者POST请求

request.encoding :表示提交数据的编码方式

request.GET :获取GET请求

request.POST :获取post的请求,比如前端提交的用户密码,可以通过request.POST.get()来获取另外:如果使用 POST 上传文件的话,文件信息将包含在 FILES 属性中

request.COOKIES :包含所有的cookie

request.META:一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:

  • CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
  • CONTENT_TYPE —— 请求的正文的MIME 类型。
  • HTTP_ACCEPT —— 响应可接收的Content-Type。
  • HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
  • HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
  • HTTP_HOST —— 客服端发送的HTTP Host 头部。
  • HTTP_REFERER —— Referring 页面。
  • HTTP_USER_AGENT —— 客户端的user-agent 字符串。
  • QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
  • REMOTE_ADDR —— 客户端的IP 地址。
  • REMOTE_HOST —— 客户端的主机名。
  • REMOTE_USER —— 服务器认证后的用户。
  • REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。
  • SERVER_NAME —— 服务器的主机名。
  • SERVER_PORT —— 服务器的端口(是一个字符串)

request.user:一个 AUTH_USER_MODEL 类型的对象,表示当前登录的用户。如果用户当前没有登录,user 将设置为 django.contrib.auth.models.AnonymousUser 的一个实例。你可以通过 is_authenticated() 区分它们把request传给前端的时候,前端可以通过 {%  if request.user.is_authenticated  %}判断用户时候登录request.session一个既可读又可写的类似于字典的对象,表示当前的会话

配置全局搜索功能:

搜索框

<div class="wp">
    <a href="index.html"><img class="fl" src="{% static 'images/logo.jpg' %}"/></a>
    <div class="searchbox fr">
    <div class="selectContainer fl">
        <span class="selectOption" id="jsSelectOption" data-value="course">
            公开课
        </span>
    <ul class="selectMenu" id="jsSelectMenu">
        <li data-value="course">公开课</li>
        <li data-value="org">课程机构</li>
        <li data-value="teacher">授课老师</li>
       </ul>
     </div>
    <input id="search_keywords" class="fl" type="text" value="" placeholder="请输入搜索内容"/>
    <img class="search_btn fr" id="jsSearchBtn" src="{% static 'images/search_btn.png' %}"/>
    </div>
</div>

这里以搜索课程为例子:

#course/views.py



class CourseListView(View):

    '''课程列表'''

    def get(self, request):
        all_courses = Course.objects.all().order_by('-add_time')
 
       # 搜索功能
        search_keywords = request.GET.get('keywords', '')     #获取前端传回的keywords值
        if search_keywords:

            # 在name字段进行操作,做like语句的操作。icontains不区分大小写,contains区分大小写 
            # or操作使用Q

            all_courses = all_courses.filter(Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords) | Q(detail__icontains=search_keywords))            
            #name值包含该关键字或desc值包含该关键字或detail值包含该关键字
                  
        return render(request, "course-list.html", {
            "all_courses":courses,
        })

前端ajax代码:

//顶部搜索栏搜索方法

function search_click(){
    var type = $('#jsSelectOption').attr('data-value'),           #获取搜索类型
        keywords = $('#search_keywords').val(),          #获取搜索框内输入的值,搜索关键字
        request_url = '';
    if(keywords == ""){                      #关键字不写,则不变化
        return                         
    }
    if(type == "course"){                                    #搜索类型为课程时,url为   /course/list?keywords="+keywords
        request_url = "/course/list?keywords="+keywords
    }else if(type == "teacher"){                                 ##同上类似
        request_url = "/org/teacher/list?keywords="+keywords  
    }else if(type == "org"){                                #同上类似
        request_url = "/org/list?keywords="+keywords
    }
    window.location.href = request_url              #跳转到该url
}



eg:    执行 http//:127.0.0.1:8000/org/list?keywords=java      会以get方式请求,会向后端发送url中的数据    keywords=java数据(字符串形式)     后端获取: res=request.GET.get('keywords','')   res --->> 'java'

生产环境:配置404页面,500页面

setting.py中设置

  • 生产环境下,DEBUG = False,静态文件由服务器配置,django不会处理
  • DEBUG = False
  • ALLOWED_HOSTS = ['*']   #允许所有端口访问
#url.py


# 全局404页面配置
handler404 = 'users.views.pag_not_found'

# 全局500页面配置
handler500 = 'users.views.page_error'

视图配置

from django.shortcuts import render_to_response


def pag_not_found(request):

    # 全局404处理函数
    response = render_to_response('404.html', {}) #返回前端404页面
    response.status_code = 404    #配置返回页面的状态码
    return response



def page_error(request):

    # 全局500处理函数
    from django.shortcuts import render_to_response
    response = render_to_response('500.html', {})
    response.status_code = 500
    return response

猜你喜欢

转载自blog.csdn.net/weixin_42475195/article/details/89599135