一、序列化和反序列化
```
#coding=utf-8
from django.http import HttpResponse
from django.views import View
import jsonpickle
from django.http import HttpResponse
from django.views import View
import jsonpickle
class User(object):
def __init__(self,uname,pwd):
self.uname = uname
self.pwd = pwd
def __init__(self,uname,pwd):
self.uname = uname
self.pwd = pwd
class IndexView(View):
def get(self,request,*args,**kwargs):
uname = request.GET.get('uname','')
pwd = request.GET.get('pwd','')
def get(self,request,*args,**kwargs):
uname = request.GET.get('uname','')
pwd = request.GET.get('pwd','')
if uname=='zhangsan' and pwd=='123':
user = User(uname,pwd)
#{"py/object": "demo5.views.User", "uname": "zhangsan", "pwd": "123"}
# ustr = jsonpickle.encode(user)
user = User(uname,pwd)
#{"py/object": "demo5.views.User", "uname": "zhangsan", "pwd": "123"}
# ustr = jsonpickle.encode(user)
# {"py/object": "demo5.views.User", "uname": "zhangsan", "pwd": "123"}
ustr =jsonpickle.dumps(user)
print ustr
request.session['user'] = ustr
ustr =jsonpickle.dumps(user)
print ustr
request.session['user'] = ustr
return HttpResponse('Get请求')
class GetSession(View):
def get(self,request,*args,**kwargs):
user = request.session.get('user','')
# <demo5.views.User object at 0x0000000003D48588>
# uuser = jsonpickle.decode(user)
def get(self,request,*args,**kwargs):
user = request.session.get('user','')
# <demo5.views.User object at 0x0000000003D48588>
# uuser = jsonpickle.decode(user)
# <demo5.views.User object at 0x0000000003D1A0F0>
uuser = jsonpickle.loads(user)
print uuser
return HttpResponse('User:%s'%uuser.uname)
uuser = jsonpickle.loads(user)
print uuser
return HttpResponse('User:%s'%uuser.uname)
```
#### 序列化部分字段
```
class User(object):
def __init__(self,uname,pwd):
self.uname = uname
self.pwd = pwd
class User(object):
def __init__(self,uname,pwd):
self.uname = uname
self.pwd = pwd
def __getstate__(self):
data = self.__dict__.copy()
del data['pwd']
return data
data = self.__dict__.copy()
del data['pwd']
return data
u = User('zhangsan','123')
s = jsonpickle.encode(u,unpicklable=False)
# jsonpickle.dumps(u,unpicklable=False)
print s
#{"uname": "zhangsan"}
在调用pickle.dump时,默认是对象的__dict__属性被存储,如果你要修改这种行为,可以在__getstate__方法中返回一个state。state将在调用pickle.load时传值给__setstate__
__setstate__(self, state)
__setstate__(self, state)
一般来说,定义了__getstate__,就需要相应地定义__setstate__来对__getstate__返回的state进行处理。
```
```
二、通用视图
#### 使用方法
#### 配置URL
```
from django.conf.urls import url
from django.contrib import admin
import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.IndexView.as_view()),
]
```
#### 创建视图
```
#coding=utf-8
from django.http import HttpResponse
from django.views import View
#coding=utf-8
from django.http import HttpResponse
from django.views import View
class IndexView(View):
def get(self,request,*args,**kwargs):
return HttpResponse('Get请求')
def get(self,request,*args,**kwargs):
return HttpResponse('Get请求')
def post(self,request,*args,**kwargs):
return HttpResponse('Post请求')
```
三、页面读取静态文件
#### Django读取静态文件方式
- settings.py文件中设置
```
STATIC_URL = '/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static/imgs'),
os.path.join(BASE_DIR,'static/css'),
os.path.join(BASE_DIR,'static/js'),
os.path.join(BASE_DIR,'static/imgs'),
os.path.join(BASE_DIR,'static/css'),
os.path.join(BASE_DIR,'static/js'),
]
```
#### 配置URL
```
from django.conf.urls import url
from django.contrib import admin
import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index.html$',views.index_view)
]
from django.conf.urls import url
from django.contrib import admin
import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index.html$',views.index_view)
]
```
#### 创建视图
```
def index_view(request):
return render(request,'index.html')
def index_view(request):
return render(request,'index.html')
```
#### 创建模板
```
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="{% static '1.png' %}"/>
</body>
</html>
</html>
```
四、模板标签渲染原理
#### 配置URL
1. 项目包/urls.py
```
from django.conf.urls import url, include
from django.contrib import admin
1. 项目包/urls.py
```
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^student/', include('student.urls')),
]
url(r'^admin/', admin.site.urls),
url(r'^student/', include('student.urls')),
]
```
2. 应用包/urls.py
```
#coding=utf-8
2. 应用包/urls.py
```
#coding=utf-8
from django.conf.urls import url
import views
import views
urlpatterns=[
url(r'^query1/$',views.query_view1)
]
url(r'^query1/$',views.query_view1)
]
```
#### 创建视图
- 方式1:
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import render
from django.template import Template,Context
# Create your views here.
def query_view1(request):
t = Template('hello:{{name}}')
c = Context({'name':'zhangsan'})
renderStr = t.render(c)
def query_view1(request):
t = Template('hello:{{name}}')
c = Context({'name':'zhangsan'})
renderStr = t.render(c)
return HttpResponse(renderStr)
```
- 方式2:
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import render
from django.template import Template,Context
# Create your views here.
def query_view1(request):
with open('templates/index.html','rb') as fr:
content = fr.read()
t = Template(content)
c = Context({'name':'lisi'})
renderStr = t.render(c)
def query_view1(request):
with open('templates/index.html','rb') as fr:
content = fr.read()
t = Template(content)
c = Context({'name':'lisi'})
renderStr = t.render(c)
return HttpResponse(renderStr)
```
#### 创建模板
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello:{{ name }}
</body>
</html>
```
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello:{{ name }}
</body>
</html>
```
- 方式3:
#### 创建视图
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import render
from django.template import Template,Context
from django.shortcuts import loader
from django.shortcuts import loader
# Create your views here.
def query_view1(request):
t = loader.get_template('index.html')
renderStr = t.render({'name':'wangwu'})
def query_view1(request):
t = loader.get_template('index.html')
renderStr = t.render({'name':'wangwu'})
return HttpResponse(renderStr)
```
- 方式4:
#### 配置视图
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import render
# Create your views here.
def query_view1(request):
return render(request,'index.html',{'name':'zhaoliu'})
```
五、自定义过滤器
#### 配置URL
```
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^student/', include('student.urls')),
]
url(r'^admin/', admin.site.urls),
url(r'^student/', include('student.urls')),
]
#coding=utf-8
from django.conf.urls import url
import views
urlpatterns=[
url(r'^$',views.index_view)
]
```
#### 创建视图
```
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Create your views here.
def index_view(request):
content = '''####过滤器'''
return render(request,'index.html',{'content':content})
def index_view(request):
content = '''####过滤器'''
return render(request,'index.html',{'content':content})
```
#### 创建模板
```
{% load filter_mark %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ content|md|safe }}
</body>
</html>
</html>
```
#### 创建自定义过滤器
1. 在应用包下创建一个名为"templatetags"的python package
2. 在包中创建一个自定义的py文件
pip install markdown
```
#coding=utf-8
#coding=utf-8
from django.template import Library
#实例名必须是register
register = Library()
register = Library()
@register.filter
def md(value):
import markdown
return markdown.markdown(value)
def md(value):
import markdown
return markdown.markdown(value)
```
#### 截取字符串功能
```
#coding=utf-8
```
#coding=utf-8
from django.template import Library
register = Library()
@register.filter
def splitstr(value,args):
start,end = args.split(',')
content = value.encode('utf-8').decode('utf-8')
return content[int(start):int(end)]
def splitstr(value,args):
start,end = args.split(',')
content = value.encode('utf-8').decode('utf-8')
return content[int(start):int(end)]
```
- index.html页面
```
{% load filter_mark %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
- index.html页面
```
{% load filter_mark %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ content|splitstr:'1,20' }}
</body>
</html>
</html>
```