• Views


    1、url匹配的过程

    视图的功能

    接收请求,进行处理,与M和T进行交互,返回应答

    返回html内容HttpResponse,也可能重定向redirect

    视图函数使用

    定义视图函数:request参数必须有,是一个HttpRequest类型的对象。参数名可以变化,但不要更改

    配置url:建立url和视图函数之间的对应关系

    url配置的过程

    在项目的urls文件中包含具体应用的urls文件,在具体应用的urls文件中包含具体url和视图的对应关系

    url配置项是定义在一个名叫urlpatterns的列表中,其中的每一个元素就是一个配置项,每一个配置项都调用url函数

    url匹配的过程-->前面的域名和?后面的参数都不会参与匹配

    错误视图

    DEBUG = True调试模式

    404:找不到页面,关闭调试模式之后,默认会显示一个标准的错误页面,如果要显示自定义的页面,则需要templates目录下面自定义一个404.html文件-->1.url没有配置  2.url配置错误

    500:服务器端的错误-->视图出错

    网站开发完成需要关闭调试模式,在settings.py文件文件中:

    DEBUG=False

    ALLOWED_HOST=['*']

     

    捕获url参数

    进行url匹配时,把所需要的捕获的部分设置成一个正则表达式组,这样django框架就会自动把匹配成功后相应组的内容作为参数传递给视图函数

     1 # urls.py
     2 
     3 urlpatterns = [
     4     #加括号变成一个组,将组里的内容传给视图函数  位置参数捕获
     5     url(r'^showarg(d+)$', views.show_arg), #捕获url参数,括号中的数 
     6                                                                 #字会传给视图函数  
     7     #捕获关键字参数
     8     url(r'^show(?P<num>d+)', views.show),#传的时候视图函数的参数 
     9                                                             #必须和正则表达式中组名一致
    10 ]
    11 
    12 # views
    13 def show_arg(request, num):
    14     return HttpResponse(num)jia

    1.位置参数:参数名可以任意指定

    2.关键字参数:在位置参数的基础上给正则表达式组命名即可  

        ?P<组名>  关键字参数,视图中参数名必须和正则表达式组名一致

    2、登录

    request就是HttpResponse类型的对象,request包含浏览器请求的信息

    request.POST 保存的是post方式提交的参数  QueryDict
    request.GET 保存的是get方式提交的参数

    QueryDict里面一个键可以对应多个值

    Q[]  Q.get() Q.getlist()

     

    <form method="post" action="/login_check">
        用户名:<input type="text" name="username"><br/>
        密码:<input type="password" name="password"><br/>
        <input type="submit" value="登录">
    </form>
     1 #views.py
     2 def login(request):
     3     '''显示登录页面'''
     4     render(request, 'booktest/login.html')
     5 
     6 def login_check(request):
     7     '''登录校验视图'''
     8     #request.POST  保存的是post提交的参数  类型<class 
     9     #'django.http.request.QueryDict'>
    10     #request.GET  保存的是get方式提交的参数 类型<class 
    11     #'django.http.request.QueryDict'>
    12     #QueryDict中一个key可以对应多个值
    13     # 1.获取提交的用户名和密码
    14     username = request.POST.get('username')
    15     password = request.POST.get('password')
    16     # 2.进行登录的校验
    17     #实际开发:根据用户名和密码查找数据库
    18     if username == 'smart' and password == '1':
    19         # 用户名密码正确,跳转到首页
    20         return redirect('/index')
    21     else:
    22         return redirect('/login')
    23         #用户名或密码错误,跳转到登录页面
    24     # 3.返回应答

    HttpRequest对象

    服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API

    request的属性

    path:返回去除域名和参数的地址

    method:返回请求方法

    encoding:一个字符串,表示提交的数据的编码方式

    GET:QueryDict类型对象,包含get请求方式的所有参数

    POST:QueryDict类型对象,包含post请求方式的所有参数

    FILES:一个类似于字典的对象,包含所有的上传文件

    COOKIES:一个标准的python字典,包含所有的cookie,键和值都为字符串

    session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django启用会话的支持时才可用

    3、ajax请求

    ajax:异步的javascript,在不重新加载页面的情况下(浏览器不再重新访问页面),对页面进行局部的刷新

     js,css,image都是静态文件

    所有的ajax请求都在后台不要返回页面或者重定向,在回调函数里面跳转

    # 在Django中使用静态文件需要新建一个static文件
    
    <head>
            <meta charset="UTF-8">
            <title>ajax</title>
            <script>src="/static/js/aa.js"</script>
            <script>
                $(function(){
                     //绑定btnAjax的click事件
                     $('#btnAjax').click(function(){
                            $.ajax({
                                     'url''/ajax_handle',
                                     'dataype''jaon'            
                              }).success(function(data){
                                       //进行处理

    if(data.res==1){
    $('#message').show().html('提示信息')
    } }) }) }) </script>
    <style>
    #message{
    diaplay:none;
    color:red;
    }
    </style>
    </head> <body> <input type="button" id="btnAjax" value="ajax请求" >
    <div id="message"></div>
    </body>
    def ajax_test(request):
        '''显示ajax页面'''
        return render(request, 'booktest/test_ajax.html')
    
    def ajax_handle(request):
        '''ajax请求处理'''
        #返回的json数据 {'res':1}
        return JsonResponse({'res':1})  #回调函数data接收

    发出请求,不等待回调函数执行就往下走,异步

    async:false,同步的ajax请求,发出请求后等待回调函数执行才能继续往下执行

    ajax登录

    不再通过表单提交请求,使用ajax

    1.首先分析出请求地址时需要携带的参数

    2.视图函数处理完成之后,所返回的json的格式

    ajax请求在后台,不要返回页面或者重定向

    def login_ajax(request):
        '''显示ajax登录页面'''
        return render(request, '/login_ajax.html')

    def login_ajax_check(request):
    username = request.POST.get('username')
    password = request.POST.get('password')

    if username =='smart' and 'password' == '1':
    return JsonResponse({'res':1})
    else:
    return JsonResponse({'res':0})

    4、cookie与session:状态保持

    Cookie-->由服务器生成,存储在浏览器端的一小段文本信息

    Cookie的特点:

    1.以键值对方式进行存储

    2.通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器  request.COOKIES

    3.cookie是基于域名安全的

    4.cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期

     

    def set_cookie(request):
        '''设置cookie信息'''
        response = HttpResponse('设置cookie')
        # 设置一个cookie信息,名字为num,值为1
        response.set_cookie('num', 1)
    # 设置过期时间
    # response.set_cookie('num', 1, max_age=14*24*3600)
    # response.set_cookie('num', 1, expires=datetime.now()+timedelta(days=14))
    # 返回response return response def get_cookie(request): '''获取cookie的信息''' # 取出cookie num的值 num = request.COOKIES['num'] return HttpResponse(num)

    Session

    一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django启用会话的支持时才可用

    Session存储在服务器端

    特点:

    以键值对进行存储

    依赖于cookie

    有过期时间,如果不指定,默认两周

    设置session:request.session[‘key’]=val

    获取session:request.session.get('key')

    清除session:删除值部分 request.session.clear()

    清除session:删除整条数据 request.session.flush()

    删除session中的指定键及值:del request.session['key']

    设置会话的超时时间,如果没有指定过期时间则两个星期后过期:request.session.set_expiry(value)-->如果value是一个整数,会话的session_id cookie将在value秒没有活动后过期;如果value为0,那么用户会话的session_id cookie将在用户的浏览器关闭时过期;如果value为None,那么会话的session_id cookie两周之后过期

    -->

    状态保存session记住登录状态  可设置request.session['islogin']

     

     应用场景-->

    cookie:记住用户名,安全性要求不高

    session:涉及到安全性要求比较高的数据

  • 相关阅读:
    浏览器缓存机制
    es6笔记(6) Iterator 和 for...of循环
    es6笔记(3.1)三个点的“...”的作用
    es6笔记(5)Map数据结构
    es6笔记(4) Set数据结构
    SpringBoot事件监听
    SpringBoot入门
    五大常用算法之三贪心算法
    五种常用算法之二:动态规划算法
    五大常用算法之一:分治算法
  • 原文地址:https://www.cnblogs.com/liushoudong/p/12705400.html
Copyright © 2020-2023  润新知