作用:接收web请求,并响应web请求。 本质:就是python中的函数。 响应内容:①网页、重定向、错误视图(404,500)②json数据
1、用户在浏览器输入网址 2、django获取网址信息,去除IP和端口号 3、url管理器逐个匹配url conf 4、若匹配成功,则执行对应的视图函数 5、视图管理器找到对应视图并执行,返回结果给浏览器
1、指定根级url文件(settings.py中设置。)
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/'2、project/urls.py中的urlpatterns中是一个url实例的列表。 每个对象都包括 正则表达式、视图名称和namespace。
3、引入其他url配置文件,在project/urls.py中使用include方法
from myapp import urls urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^chendw/', include('myapp.urls', namespace="myapp")) ]1、若要从url中获取值,则需要对正则加小括号
url(r'^(\d+)/$', views.detail), # 正则表达式2、匹配正则前方不需要加 ‘/’反斜杠 3、正则前需要加‘r’,表示字符串不转义
参数: 第一个,HttpRequest的对象实例 第二个,通过正则表达式获取
def detail(request, num): return HttpResponse("detail -%s" %num)位置: 一般在views.py中定义
错误视图: 500 在视图代码中出错 400 错误出现在客户的操作 404 找不到网页(url匹配失败) 以上错误视图均可自己定义,在template目录下定义,并在settings.py中进行配置。(注释掉默认的错误视图)
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', ]服务器接受http请求后,会根据报文创建HttpRequest对象,视图函数中第一个参数就是HttpRequest对象。
用于给浏览器返回数据
1、不调用模板,直接返回数据
def index(request): return HttpResponse("chendw is good man")2、调用模板,使用render()方法渲染
def grades(request): # 去模板里取数据 grades_list = Grades.objects.all() # 将数据传给模板 return render(request, 'myapp/grades.html', {"grades": grades_list})原型: render(request,template,{context}) 作用:结合数据和模板,返回完整html页面
HttpResponseRedirect 重定向,服务器跳转
from django.http import HttpResponseRedirect # redirect def redirecttest1(request): return HttpResponseRedirect('/chendw/redirect2')概述: Http协议是无状态的,每次请求都是新的请求。 服务器与客户端的一次通信,就是一个新的会话。 实现状态保持,由客户端或服务器存储。 存储方式包括:cookie或session。
目的: 在一段时间内跟踪请求者的状态,可以实现跨页面访问请求者数据,但不同请求者直接的数据不共享。
settings.py文件中的INSTALLED_APP和MIDDLEWARE字段中配置。
INSTALLED_APPS = [ 'django.contrib.sessions', ] MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', ]每个HttpRequest对象都有一个session属性,是一个类似字典的对象。通过调用session对象进行调用。
def main(request): username = request.session.get('name', "游客") return render(request, 'myapp/main.html',{'name': username}) def login(request): return render(request,'myapp/login.html') def showmain(request): username = request.POST.get('username') request.session['name'] = username request.session.set_expiry(10) return redirect('/chendw/main/') from django.contrib.auth import logout def quit(request): # logout(request request.session.clear() return redirect('/chendw/main')若不设置,则默认两周后过期。 参数可选:
参数效果None永不过期整数秒时间对象指定日期过期0关闭浏览器过期1、默认为数据库存储session
# 数据库保存session SESSION_ENGINE = 'django.contrib.session.backends.db'2、使用缓存保存session,只保存在内存中,若丢失则无法恢复,但相比数据库访问速度较快。
# 缓存保存session SESSION_ENGINE = 'django.contrib.session.backends.cache'3、数据库和缓存并用保存session,优先读取缓存,若无则寻找数据库。
# 缓存和数据库保存session SESSION_ENGINE = 'django.contrib.session.backends.cached_db'