1、url匹配的过程
视图的功能
接收请求,进行处理,与M和T进行交互,返回应答
返回html内容HttpResponse,也可能重定向redirect
视图函数使用
定义视图函数:request参数必须有,是一个HttpRequest类型的对象。参数名可以变化,但不要更改
配置url:建立url和视图函数之间的对应关系
url配置的过程
在项目的urls文件中包含具体应用的urls文件,在具体应用的urls文件中包含具体url和视图的对应关系
url配置项是定义在一个名叫urlpatterns的列表中,其中的每一个元素就是一个配置项,每一个配置项都调用url函数
url匹配的过程-->前面的域名和?后面的参数都不会参与匹配
错误视图
DEBUG = True调试模式
404:找不到页面,关闭调试模式之后,默认会显示一个标准的错误页面,如果要显示自定义的页面,则需要templates目录下面自定义一个404.html文件-->1.url没有配置 2.url配置错误
500:服务器端的错误-->视图出错
网站开发完成需要关闭调试模式,在settings.py文件文件中:
DEBUG=False
ALLOWED_HOST=['*']
捕获url参数
进行url匹配时,把所需要的捕获的部分设置成一个正则表达式组,这样django框架就会自动把匹配成功后相应组的内容作为参数传递给视图函数
1 # urls.py 2 3 urlpatterns = [ 4 #加括号变成一个组,将组里的内容传给视图函数 位置参数捕获 5 url(r'^showarg(d+)$', views.show_arg), #捕获url参数,括号中的数 6 #字会传给视图函数 7 #捕获关键字参数 8 url(r'^show(?P<num>d+)', views.show),#传的时候视图函数的参数 9 #必须和正则表达式中组名一致 10 ] 11 12 # views 13 def show_arg(request, num): 14 return HttpResponse(num)jia
1.位置参数:参数名可以任意指定
2.关键字参数:在位置参数的基础上给正则表达式组命名即可
?P<组名> 关键字参数,视图中参数名必须和正则表达式组名一致
2、登录
request就是HttpResponse类型的对象,request包含浏览器请求的信息
request.POST 保存的是post方式提交的参数 QueryDict
request.GET 保存的是get方式提交的参数
QueryDict里面一个键可以对应多个值
Q[] Q.get() Q.getlist()
<form method="post" action="/login_check"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="登录"> </form>
1 #views.py 2 def login(request): 3 '''显示登录页面''' 4 render(request, 'booktest/login.html') 5 6 def login_check(request): 7 '''登录校验视图''' 8 #request.POST 保存的是post提交的参数 类型<class 9 #'django.http.request.QueryDict'> 10 #request.GET 保存的是get方式提交的参数 类型<class 11 #'django.http.request.QueryDict'> 12 #QueryDict中一个key可以对应多个值 13 # 1.获取提交的用户名和密码 14 username = request.POST.get('username') 15 password = request.POST.get('password') 16 # 2.进行登录的校验 17 #实际开发:根据用户名和密码查找数据库 18 if username == 'smart' and password == '1': 19 # 用户名密码正确,跳转到首页 20 return redirect('/index') 21 else: 22 return redirect('/login') 23 #用户名或密码错误,跳转到登录页面 24 # 3.返回应答
HttpRequest对象
服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API
request的属性
path:返回去除域名和参数的地址
method:返回请求方法
encoding:一个字符串,表示提交的数据的编码方式
GET:QueryDict类型对象,包含get请求方式的所有参数
POST:QueryDict类型对象,包含post请求方式的所有参数
FILES:一个类似于字典的对象,包含所有的上传文件
COOKIES:一个标准的python字典,包含所有的cookie,键和值都为字符串
session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django启用会话的支持时才可用
3、ajax请求
ajax:异步的javascript,在不重新加载页面的情况下(浏览器不再重新访问页面),对页面进行局部的刷新
js,css,image都是静态文件
所有的ajax请求都在后台不要返回页面或者重定向,在回调函数里面跳转
# 在Django中使用静态文件需要新建一个static文件 <head> <meta charset="UTF-8"> <title>ajax</title> <script>src="/static/js/aa.js"</script> <script> $(function(){ //绑定btnAjax的click事件 $('#btnAjax').click(function(){ $.ajax({ 'url':'/ajax_handle', 'dataype':'jaon' }).success(function(data){ //进行处理
if(data.res==1){
$('#message').show().html('提示信息')
} }) }) }) </script>
<style>
#message{
diaplay:none;
color:red;
}
</style>
</head> <body> <input type="button" id="btnAjax" value="ajax请求" >
<div id="message"></div>
</body>
def ajax_test(request): '''显示ajax页面''' return render(request, 'booktest/test_ajax.html') def ajax_handle(request): '''ajax请求处理''' #返回的json数据 {'res':1} return JsonResponse({'res':1}) #回调函数data接收
发出请求,不等待回调函数执行就往下走,异步
async:false,同步的ajax请求,发出请求后等待回调函数执行才能继续往下执行
ajax登录
不再通过表单提交请求,使用ajax
1.首先分析出请求地址时需要携带的参数
2.视图函数处理完成之后,所返回的json的格式
ajax请求在后台,不要返回页面或者重定向
def login_ajax(request): '''显示ajax登录页面''' return render(request, '/login_ajax.html')
def login_ajax_check(request):
username = request.POST.get('username')
password = request.POST.get('password')
if username =='smart' and 'password' == '1':
return JsonResponse({'res':1})
else:
return JsonResponse({'res':0})
4、cookie与session:状态保持
Cookie-->由服务器生成,存储在浏览器端的一小段文本信息
Cookie的特点:
1.以键值对方式进行存储
2.通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器 request.COOKIES
3.cookie是基于域名安全的
4.cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期
def set_cookie(request): '''设置cookie信息''' response = HttpResponse('设置cookie') # 设置一个cookie信息,名字为num,值为1 response.set_cookie('num', 1)
# 设置过期时间
# response.set_cookie('num', 1, max_age=14*24*3600)
# response.set_cookie('num', 1, expires=datetime.now()+timedelta(days=14)) # 返回response return response def get_cookie(request): '''获取cookie的信息''' # 取出cookie num的值 num = request.COOKIES['num'] return HttpResponse(num)
Session
一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django启用会话的支持时才可用
Session存储在服务器端
特点:
以键值对进行存储
依赖于cookie
有过期时间,如果不指定,默认两周
设置session:request.session[‘key’]=val
获取session:request.session.get('key')
清除session:删除值部分 request.session.clear()
清除session:删除整条数据 request.session.flush()
删除session中的指定键及值:del request.session['key']
设置会话的超时时间,如果没有指定过期时间则两个星期后过期:request.session.set_expiry(value)-->如果value是一个整数,会话的session_id cookie将在value秒没有活动后过期;如果value为0,那么用户会话的session_id cookie将在用户的浏览器关闭时过期;如果value为None,那么会话的session_id cookie两周之后过期
-->
状态保存session记住登录状态 可设置request.session['islogin']
应用场景-->
cookie:记住用户名,安全性要求不高
session:涉及到安全性要求比较高的数据