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 >

...

</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')