文章目录
-
- 作用: 视图接受web请求,并响应Web请求 本质: 视图就是 一个Python中的函数 响应内容: 网页 重定向 错误视图 404:url找不到 500: 服务器内部错误 JSON数据
-
- 在settings.py中指定根级URL配置文件:ROOT_URLCONF = 'project.urls',默认实现了。 urlpatterns: 一个url实例的对象 url对象 正则表达式 视图名称 名称(用来反向解析的) url匹配正则的注意事项: 如果想要从url中获取一个值,需要对正则加小括号 匹配正确,前方不需要加小斜杠/,一般在最后加 正则前需要加r表示字符串不转义
- 一般在应用中创建urls.py文件,定义本应用的url配置,在工程urls.py文件中使用include()方法: url(r'^', include('myApp.urls',namespace='myApp')),
- 工程url->应用url->视图
- 概述 如果在视图/模板中使用了硬编码的连接,在url配置发生改变时,动态生成链接的地址。 解决思路 在使用链接时,通过url配置的名称,动态生成url地址。 作用 使用url模板的时候
-
- 接收HTTP请求后,会根据报文创建HttpRequest对象 视图的第一个参数就是HttpRequest对象 Djano对象创建的,之后调用试图传递给视图
- path 请求的完整路径(不包括域名和端口) method 表示请求的方式,常用的有GET、POST encoding 表示浏览器提交的数据的编码方式,一般为utf-8 GET 类似字典的对象,包含了get请求的所有参数 POST 类似字典的对象,包含了post请求的所有参数 FILES 类似字典的对象,包含了所有上传的文件。 COOKIES 字典,包含所有的cookie session 类似字典的对象,表示当前会话
- is_ajax() 如果是XMLHttpRequest发起的,返回True
- request对象中的GET、POST对象都属于QueryDict对象 方法 get() 作用:根据键获取值 只能获取一个值 www.baidu.com/abc?a=1&b=2&c=3 getlist() 将键的值以列表形式返回 可以获取多个值 www.baidu.com/abc?a=1&a=2&c=3 (注意有两个a)
- # 获取get传递的数据 def get1(request): a = request.GET.get("a") b = request.GET["b"] c = request.GET.get("c") return HttpResponse(a + " " + b + " " + c) def get2(request): a = request.GET.getlist('a') a1 = a[0] a2 = a[1] b = request.GET.get('c') return HttpResponse(a1 + " " + a2 + " " + b)
- 使用表单模拟提交post请求 关闭CSRF: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] test case def showregister(request): name = request.POST.get("username") gender = request.POST.get("gender") age = request.POST.get("age") hobby = request.POST.getlist("hobby") # checkbox info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby)) print(info) return HttpResponse(info)
-
- 作用 给浏览器返回数据的 HttpRequest对象是由Django创建的,HttpResponse对象由程序员创建。
- 不调用模板,直接返回数据 return HttpResponse(info) 调用模板 render()返回方法 原型:render(request,templateName[,context]) 作用:结合数据和模板,返回完整的HTML页面 参数: request:请求体对象 templateName:模板路径 context:需要渲染在模板上的数据 属性: content: 返回内容 charset: 编码格式 statuse_code:响应状态 200 304 404 content-type:指定输出的MIME类型 #later 方法 init 使用页面内容实例化HttpResponse对象 write(content) 以文件的形式写入 flush: 以文件的形式输出缓冲区(刷新) set_cookie(key,value="",max_age=None,exprise=None) delete_cookie(key) 删除cookie 如果删除一个不存在的key,就当什么都没发生。 子类HttpResponseRedirect 功能 重定向,服务器跳转 简写 redirect(to) to推荐使用反向解析 子类`JSonResponse 返回json数据,一般用于异步请求。(Ajax) __ini__(self,data) data是一个字典 注意: Content-type类型为:applicaiton/json test case def stupage(request,page): # 0 - 5 , 5 - 10 page = int(page) studentsList = Students.stuObj2.all()[(page-1)*5:page*5] return render(request, 'myApp/students.html', {'students': studentsList}) def cookieset(request): res = HttpResponse() # res.write("setcookies") cookie = res.set_cookie("name", "emperinter") #设置 return res def getcookie(request): res = HttpResponse() cookie = request.COOKIES res.write("<h1>" + cookie["name"] + "</h1>") return res from django.shortcuts import redirect from django.http import HttpResponseRedirect # 重定向 def redirect1(request): # return HttpResponseRedirect("/redirect2/") return redirect("/redirect2/") def redirect2(request): return HttpResponse("我是重定向后的视图")
-
- HTTP协议是无状态的,每次请求都是一次新的请求,不记得以前的请求; 客户端与服务器端的一次通信就是一次会话; 想实现状态保持,需要在客户端或服务器端存储有关会话的数据 存储方式 cookie 所有的数据都在客户端,不要存储敏感的数据 不安全/数据量小 session 所有的数据在服务器端,在客户端用cookie存储session_id 状态保持目的 在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据。 注意 不同的请求者之间不会共享这个数据,与请求者是一一对应的。
- 在settings.py中启动,默认是启用的 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', # session配置 'django.contrib.messages', 'django.contrib.staticfiles', 'myApp', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # session配置 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
- 启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字段的对象; 方法 get(key,default=None) 根据键获取session值 clear() 清空所有的会话 flush() 删除当前的会话并删除会话的cookie 设置过期时间 set_expiry(value) 如果不设置,默认两个星期后过期 value 整数,单位为秒 时间对象 0 :关闭浏览器时失效 None :永不过期 使用redis存储缓存 安装pip install django-redis-sessions 在seetings.py中配置 SESSION_ENGINE = 'redis_sessions.session' SESSION_CACHE_ALIAS = 'default' SESSION_REDIS_HOST = 'localhost' SESSION_REDIS_PORT = 6379 SESSION_REDIS_DB = 0 SESSION_REDIS_PASSWORD = None SESSION_REDIS_PREFIX = 'session' def main(request): username = request.session.get("username","游客") # 获取session,后面是默认值 return render(request, 'myApp/main.html', {"username":username}) def login(request): return render(request, 'myApp/login.html') def showmain(request): username = request.POST.get("username") password = request.POST.get("password") # save in session request.session["username"] = username request.session.set_expiry(10) # 设置session过期时间 return redirect("/main/") from django.contrib.auth import logout def quit(request): logout(request) # 清除当前登录,推荐使用 # del session # del request.session["username"] # request.session.flush() # 清除所有session # request.session.clear() # 清除所有session return redirect("/main/")
- 作用:
- 视图接受web请求,并响应Web请求
- 本质:
- 视图就是 一个Python中的函数
- 响应内容:
- 网页
- 重定向
- 错误视图
- 404:url找不到
- 500: 服务器内部错误
- JSON数据
- 视图接受web请求,并响应Web请求
- 视图就是 一个Python中的函数
- 网页
- 重定向
- 错误视图
- 404:url找不到
- 500: 服务器内部错误
- JSON数据
- 在
settings.py中指定根级URL配置文件:ROOT_URLCONF = 'project.urls',默认实现了。
urlpatterns:
- 一个url实例的对象
- url对象
- 正则表达式
- 视图名称
- 名称(用来反向解析的)
- url匹配正则的注意事项:
- 如果想要从url中获取一个值,需要对正则加小括号
- 匹配正确,前方不需要加小斜杠
/,一般在最后加
- 正则前需要加
r表示字符串不转义
settings.py中指定根级URL配置文件:ROOT_URLCONF = 'project.urls',默认实现了。urlpatterns:
- 一个url实例的对象
- url对象
- 正则表达式
- 视图名称
- 名称(用来反向解析的)
- 如果想要从url中获取一个值,需要对正则加小括号
- 匹配正确,前方不需要加小斜杠
/,一般在最后加 - 正则前需要加
r表示字符串不转义
urls.py文件,定义本应用的url配置,在工程urls.py文件中使用include()方法: url(r'^', include('myApp.urls',namespace='myApp')),
- 工程url->应用url->视图
- 概述
- 如果在视图/模板中使用了硬编码的连接,在url配置发生改变时,动态生成链接的地址。
- 解决思路
- 在使用链接时,通过url配置的名称,动态生成url地址。
- 作用
- 使用url模板的时候
- 如果在视图/模板中使用了硬编码的连接,在url配置发生改变时,动态生成链接的地址。
- 在使用链接时,通过url配置的名称,动态生成url地址。
- 使用url模板的时候
- 本质:一个函数
- 视图参数:
request 一个HttpRequest的实例
- 通过url正则表达式获取的参数
- 位置:
- 一般在
views.py中定义
request一个HttpRequest的实例- 通过url正则表达式获取的参数
- 一般在
views.py中定义
- 404视图
- 找不到网页(url匹配不成功)时返回。
- 可以自己定义。
- 在
templates下定义404.html
request_path:导致出错的网址。
- 配置
settings.py
DEBUG 如果为True 永远不会调用404.html页面
ALLOWED_HOSTS = [*]
- 500视图
- 在视图代码中出现错误(服务器代码)。
- 400视图
- 错误是客户的操作。
- 找不到网页(url匹配不成功)时返回。
- 可以自己定义。
- 在
templates下定义404.htmlrequest_path:导致出错的网址。
- 配置
settings.pyDEBUG如果为True永远不会调用404.html页面ALLOWED_HOSTS = [*]
- 在
- 在视图代码中出现错误(服务器代码)。
- 错误是客户的操作。
- 接收HTTP请求后,会根据报文创建
HttpRequest对象
- 视图的第一个参数就是
HttpRequest对象
- Djano对象创建的,之后调用试图传递给视图
HttpRequest对象HttpRequest对象
path
- 请求的完整路径(不包括域名和端口)
method
- 表示请求的方式,常用的有GET、POST
encoding
- 表示浏览器提交的数据的编码方式,一般为
utf-8
GET
- 类似字典的对象,包含了get请求的所有参数
POST
- 类似字典的对象,包含了post请求的所有参数
FILES
- 类似字典的对象,包含了所有上传的文件。
COOKIES
- 字典,包含所有的cookie
session
- 类似字典的对象,表示当前会话
path
- 请求的完整路径(不包括域名和端口)
method
- 表示请求的方式,常用的有GET、POST
encoding
- 表示浏览器提交的数据的编码方式,一般为
utf-8
GET
- 类似字典的对象,包含了get请求的所有参数
POST
- 类似字典的对象,包含了post请求的所有参数
FILES
- 类似字典的对象,包含了所有上传的文件。
COOKIES
- 字典,包含所有的cookie
session
- 类似字典的对象,表示当前会话
is_ajax()
- 如果是
XMLHttpRequest发起的,返回True
is_ajax()
- 如果是
XMLHttpRequest发起的,返回True
- request对象中的GET、POST对象都属于QueryDict对象
- 方法
get()
- 作用:根据键获取值
- 只能获取一个值
www.baidu.com/abc?a=1&b=2&c=3
getlist()
- 将键的值以列表形式返回
- 可以获取多个值
www.baidu.com/abc?a=1&a=2&c=3 (注意有两个a)
get()- 作用:根据键获取值
- 只能获取一个值
www.baidu.com/abc?a=1&b=2&c=3
getlist()- 将键的值以列表形式返回
- 可以获取多个值
www.baidu.com/abc?a=1&a=2&c=3(注意有两个a)
# 获取get传递的数据
def get1(request):
a = request.GET.get("a")
b = request.GET["b"]
c = request.GET.get("c")
return HttpResponse(a + " " + b + " " + c)
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
b = request.GET.get('c')
return HttpResponse(a1 + " " + a2 + " " + b)
# 获取get传递的数据
def get1(request):
a = request.GET.get("a")
b = request.GET["b"]
c = request.GET.get("c")
return HttpResponse(a + " " + b + " " + c)
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
b = request.GET.get('c')
return HttpResponse(a1 + " " + a2 + " " + b)
- 使用表单模拟提交post请求
- 关闭
CSRF:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- test case
def showregister(request):
name = request.POST.get("username")
gender = request.POST.get("gender")
age = request.POST.get("age")
hobby = request.POST.getlist("hobby") # checkbox
info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby))
print(info)
return HttpResponse(info)
CSRF:MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
def showregister(request):
name = request.POST.get("username")
gender = request.POST.get("gender")
age = request.POST.get("age")
hobby = request.POST.getlist("hobby") # checkbox
info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby))
print(info)
return HttpResponse(info)
- 作用
- 给浏览器返回数据的
HttpRequest对象是由Django创建的,HttpResponse对象由程序员创建。
- 给浏览器返回数据的
HttpRequest对象是由Django创建的,HttpResponse对象由程序员创建。
- 不调用模板,直接返回数据
return HttpResponse(info)
- 调用模板
render()返回方法
- 原型:
render(request,templateName[,context])
- 作用:结合数据和模板,返回完整的HTML页面
- 参数:
- request:请求体对象
- templateName:模板路径
- context:需要渲染在模板上的数据
- 属性:
content: 返回内容
charset: 编码格式
statuse_code:响应状态
- 200
- 304
- 404
content-type:指定输出的MIME类型 #later
- 方法
init 使用页面内容实例化HttpResponse对象
write(content) 以文件的形式写入
flush: 以文件的形式输出缓冲区(刷新)
set_cookie(key,value="",max_age=None,exprise=None)
delete_cookie(key)
- 删除cookie
- 如果删除一个不存在的key,就当什么都没发生。
- 子类
HttpResponseRedirect
- 功能
- 重定向,服务器跳转
- 简写
redirect(to)
to推荐使用反向解析
- 子类`JSonResponse
- 返回json数据,一般用于异步请求。(Ajax)
__ini__(self,data)
data是一个字典
- 注意:
- Content-type类型为:applicaiton/json
-
test case
def stupage(request,page):
# 0 - 5 , 5 - 10
page = int(page)
studentsList = Students.stuObj2.all()[(page-1)*5:page*5]
return render(request, 'myApp/students.html', {'students': studentsList})
def cookieset(request):
res = HttpResponse()
# res.write("setcookies")
cookie = res.set_cookie("name", "emperinter") #设置
return res
def getcookie(request):
res = HttpResponse()
cookie = request.COOKIES
res.write("<h1>" + cookie["name"] + "</h1>")
return res
from django.shortcuts import redirect
from django.http import HttpResponseRedirect
# 重定向
def redirect1(request):
# return HttpResponseRedirect("/redirect2/")
return redirect("/redirect2/")
def redirect2(request):
return HttpResponse("我是重定向后的视图")
return HttpResponse(info)
render()返回方法- 原型:
render(request,templateName[,context]) - 作用:结合数据和模板,返回完整的HTML页面
- 参数:
- request:请求体对象
- templateName:模板路径
- context:需要渲染在模板上的数据
- 原型:
- 属性:
content: 返回内容charset: 编码格式statuse_code:响应状态- 200
- 304
- 404
content-type:指定输出的MIME类型 #later
init使用页面内容实例化HttpResponse对象write(content)以文件的形式写入flush: 以文件的形式输出缓冲区(刷新)set_cookie(key,value="",max_age=None,exprise=None)delete_cookie(key)- 删除cookie
- 如果删除一个不存在的key,就当什么都没发生。
HttpResponseRedirect
- 功能
- 重定向,服务器跳转
- 简写
redirect(to)
to推荐使用反向解析
- 返回json数据,一般用于异步请求。(Ajax)
__ini__(self,data)data是一个字典- 注意:
- Content-type类型为:applicaiton/json
test case
def stupage(request,page):
# 0 - 5 , 5 - 10
page = int(page)
studentsList = Students.stuObj2.all()[(page-1)*5:page*5]
return render(request, 'myApp/students.html', {'students': studentsList})
def cookieset(request):
res = HttpResponse()
# res.write("setcookies")
cookie = res.set_cookie("name", "emperinter") #设置
return res
def getcookie(request):
res = HttpResponse()
cookie = request.COOKIES
res.write("<h1>" + cookie["name"] + "</h1>")
return res
from django.shortcuts import redirect
from django.http import HttpResponseRedirect
# 重定向
def redirect1(request):
# return HttpResponseRedirect("/redirect2/")
return redirect("/redirect2/")
def redirect2(request):
return HttpResponse("我是重定向后的视图")
- HTTP协议是无状态的,每次请求都是一次新的请求,不记得以前的请求;
- 客户端与服务器端的一次通信就是一次会话;
- 想实现状态保持,需要在客户端或服务器端存储有关会话的数据
- 存储方式
- cookie
- 所有的数据都在客户端,不要存储敏感的数据
- 不安全/数据量小
- session
- 所有的数据在服务器端,在客户端用cookie存储session_id
- 状态保持目的
- 在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据。
- 注意
- 不同的请求者之间不会共享这个数据,与请求者是一一对应的。
- cookie
- 所有的数据都在客户端,不要存储敏感的数据
- 不安全/数据量小
- session
- 所有的数据在服务器端,在客户端用cookie存储session_id
- 在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据。
- 不同的请求者之间不会共享这个数据,与请求者是一一对应的。
- 在
settings.py中启动,默认是启用的
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions', # session配置
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', # session配置
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
settings.py中启动,默认是启用的INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions', # session配置
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', # session配置
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- 启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字段的对象;
- 方法
get(key,default=None) 根据键获取session值
clear() 清空所有的会话
flush() 删除当前的会话并删除会话的cookie
- 设置过期时间
set_expiry(value)
- 如果不设置,默认两个星期后过期
- value
- 整数,单位为秒
- 时间对象
- 0 :关闭浏览器时失效
- None :永不过期
- 使用redis存储缓存
- 安装
pip install django-redis-sessions
- 在
seetings.py中配置
SESSION_ENGINE = 'redis_sessions.session'
SESSION_CACHE_ALIAS = 'default'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 0
SESSION_REDIS_PASSWORD = None
SESSION_REDIS_PREFIX = 'session'
def main(request):
username = request.session.get("username","游客") # 获取session,后面是默认值
return render(request, 'myApp/main.html', {"username":username})
def login(request):
return render(request, 'myApp/login.html')
def showmain(request):
username = request.POST.get("username")
password = request.POST.get("password")
# save in session
request.session["username"] = username
request.session.set_expiry(10) # 设置session过期时间
return redirect("/main/")
from django.contrib.auth import logout
def quit(request):
logout(request) # 清除当前登录,推荐使用
# del session
# del request.session["username"]
# request.session.flush() # 清除所有session
# request.session.clear() # 清除所有session
return redirect("/main/")
get(key,default=None)根据键获取session值clear()清空所有的会话flush()删除当前的会话并删除会话的cookie- 设置过期时间
set_expiry(value)- 如果不设置,默认两个星期后过期
- value
- 整数,单位为秒
- 时间对象
- 0 :关闭浏览器时失效
- None :永不过期
- 安装
pip install django-redis-sessions - 在
seetings.py中配置
SESSION_ENGINE = 'redis_sessions.session'
SESSION_CACHE_ALIAS = 'default'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 0
SESSION_REDIS_PASSWORD = None
SESSION_REDIS_PREFIX = 'session'
def main(request):
username = request.session.get("username","游客") # 获取session,后面是默认值
return render(request, 'myApp/main.html', {"username":username})
def login(request):
return render(request, 'myApp/login.html')
def showmain(request):
username = request.POST.get("username")
password = request.POST.get("password")
# save in session
request.session["username"] = username
request.session.set_expiry(10) # 设置session过期时间
return redirect("/main/")
from django.contrib.auth import logout
def quit(request):
logout(request) # 清除当前登录,推荐使用
# del session
# del request.session["username"]
# request.session.flush() # 清除所有session
# request.session.clear() # 清除所有session
return redirect("/main/")
