zoukankan      html  css  js  c++  java
  • 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:涉及到安全性要求比较高的数据

  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/liushoudong/p/12705400.html
Copyright © 2011-2022 走看看