• python+Django创建购物网站(二)


    一、Django模板语言,Django Template Language (DTL)

    模板语言内容比较多,具体用到哪块,再去学习相应的模块就可以了。

    学习链接:http://www.liujiangblog.com/course/django/145

    官网(英文):https://docs.djangoproject.com/en/2.1/ref/templates/language/

    模板语言主要包括以下几种形式:

    1、变量
    {{ ... }} 输出Python表达式结果。
     
    2、过滤器
    {{ 变量 | 过滤器 }}
    https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#built-in-filter-reference
    <html>
    <body>
        <h3>name变量:{{ name }}</h3>
        <h3>name单词首字母大写:{{ name|title }}</h3>
        <h3>name小写:{{ name|lower }}</h3>
        <h3>name大写:{{ name|upper }}</h3>
        <h3>name字符串长度:{{ name|length }}</h3>
        <h3>获得第一个元素:{{ message|first }}</h3>
        <h3>获得最后一个元素:{{ message|last }}</h3>
        <h3>将元素连接起来:{{ message|join:"&nbsp;&nbsp;" }}</h3>
        <h3>截取前两个单词:{{ message|first|truncatewords:2 }}</h3>
        <h3>日期格式化:{{ date|date:"Y-m-d" }}</h3>
        <h3>数字格式化:{{ number|floatformat:2 }}</h3>
    </body>
    </html>
     
    3、模板标签
    标签可以执行一些操作语句,如if、for和模板继承等。
    {% ... %}
     
    例如:
    判断结构:
    {% if 条件表达式 %}
    ...
    {% endif %}
    循环结构:
    {% for item in 序列 %}
    ...
    {% endfor %}
     
    4、模板继承
     定义基础模板base.html:
    <div id="content">
        {% block body %}
        {% endblock %}
    </div>
    继承基础模板login.html:
    {% extends "base.html" %}
    ...
    {% block body %}
      <table width="40%" border="0">
       ...
      </table>
    {% endblock %}
     

    二、访问静态文件

    Web应用有一些静态文件,如:图片文件、CSS文件和Javascript文件等。
    配置步骤:
    1、确认settings.py中INSTALLED_APPS否安装了django.contrib.staticfiles。
    2、确认settings.py中STATIC_URL的配置:
    STATIC_URL = '/static/'
    3、在books下面创建static文件夹,然后把静态文件复制到static文件夹中。

    4、修改模板文件
    {% load static %}
    ...
    <link rel="stylesheet" type="text/css" href="{% static 'css/book.css' %}">
    ...
    <img src="{% static 'images/book_img2.jpg' %}" width="20px" height="20px">

    三、HttpRequest对象

    HTTP协议有请求和应答过程,客户端提交的数据被封装在请求对象中。Flask提供了请求对象HttpRequest,HttpRequest的属性:
    method:返回当前请求方法。
    POST:返回HTTP POST请求参数,它是QueryDict字典类型数据,包含了客户端提交表单数据,数据键是客户端控件名,数据值是客户端控件的值。
    GET:返回HTTP GET请求参数,它是QueryDict字典类型数据。是客户端提交参数,参数是跟在URL的?后面的内容,http://127.0.0.1:8000/books/login/?userid=tony&userpwd=12345
    COOKIES:是客户端Cookie对象,是字典类型。
    session:是客户端HTTP Session对象,是字典类型。
    FILES:与上传文件相关数据。

    四、HttpResponse响应对象。

    HTTP协议有请求和应答过程,服务器端返回的数据被封装在应答对象中。 HTTP协议应答包含了返回给客户端的字符串、状态码(默认是200)。
    HttpResponse应答对象主要属性:
    content:返回给客户端内容,默认是字符串。
    charset:指定返回给客户端内容的字符集,默认是UTF-8。
    status_code:响应HTTP状态代码。
    reason_phrase:响应HTTP状态原因。
    HttpResponse应答对象主要方法:
    构造方法HttpResponse(content='', content_type=None, status=200, reason=None, charset=None):content_type是设置应答的MIME类型,用于填充HTTP Content-Type标头。默认是text/html; charset=utf-8
    set_cookie(key, value=''):设置Cookies。
    delete_cookie(key,path ='/',domain = None):删除Cookies。
     
    示例:
    def hello(request):
        response = HttpResponse("<h3>Hello, world. </h3>", charset='gbk')
        response.charset = 'gbk' #'utf-8'
        response.write('<h3>世界你好。</h3>')
        return response

    五、Cookie对象

    Cookie是存储在客户端计算机上的数据,不同的浏览器有自己的存储目录,使用Cookie的目的是记住和跟踪与客户使用相关的数据。

    1、设置Cookie,使用HttpResponse的set_cookie函数:
    set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None)
    key:Cookie键。
    value:Cookie值。
    expires:设置Cookie超时时间,HTTP/1.0中定义的。设置的"Wdy, DD-Mon-YY HH:MM:SS GMT"字符串,或datetime.datetime时间对象。
    max_age:设置Cookie超时时间,单位是秒,HTTP/1.1中定义的。
    domain:设置Cookie域,如果你想设置一个跨域的Cookie,可以设置域名。  

    设置示例:
    def index(request):
        response = HttpResponse("<h3>设置Cookies</h3>")
        # 设置Cookies
        response.set_cookie('userid', 'tony')
        return response
    使用expires设置超时时间:
    timeoutdate = datetime.today() + timedelta(days=10)
    response.set_cookie('userid', 'tony', expires=timeoutdate)
    使用max_age设置超时时间:
    response.set_cookie('userid', 'tony', max_age=60)
     
    2、获取Cookie,使用HttpRequest的COOKIES属性返回Cookie对象,再通过Cookie键获得:
    def hello(request):
        # 取出Cookies
        name = request.COOKIES.get('userid')
        response = HttpResponse("<h3>取出Cookies</h3>")
        response.write('<h3>Cookies中userid:' + str(name) + '</h3>')
        return response
     

    六、Session对象

    Session与Cookie不同,Session是存储在服务器端,服务器为每一个客户端分配一个Session ID,当浏览器关闭或Session操作超时,Session就会失效。Session往往用来存储用户的登录信息。Session数据结构与Cookie一样都是字典结构。
     
    在Django中Session的数据是放到数据库中的,因此需要保证Session表已经创建,如果没有需要执行如下指令:
    python manage.py migrate
    否则发生错误:{OperationalError}no such table: django_session
     
    # 设置关闭浏览器Session过期
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True
     
    1、设置Session:
    def login(request):
        if request.method == 'POST':
            userid = request.POST['userid']
            request.session['userid'] = userid
        return render(request, 'result.html')
     
     
    2、获取Session:
    <h3>存储在Session中的userid数据:{{ request.session.userid }}</h3>
    注意:在模板中取Session数据,不能通过方法和下标(session['userid'])方法。方法Session的表达式是session.key,例如:(session.userid)。
     
    3、删除Session:
    def logout(request):
        if request.session.has_key('userid'):
            del request.session['userid']
        return render(request, 'result.html')
     


     

  • 相关阅读:
    彭明辉教授-《研究生完全求生手册》
    使用npm创建一个命令行工具
    #!/usr/bin/python与#!/usr/bin/env python的区别
    使用node+express搭建第一个node后端项目
    使用npm创建一个程序库包
    多项式多点求值
    2. 两数相加
    CSS实现子元素自动充满父元素的剩余空间
    侧边导航栏滚动条---CSS overflow实现
    Asp.NET Core简介
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/12097092.html
Copyright © 2020-2023  润新知