当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端
请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中.
url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配,
一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.
视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.
客户端浏览器接收到返回的数据,经过渲染后显示给用户.
中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件负责做一些特定的功能。
此方法必须在视图函数返回的对象有一个 render() 方法(或者表明该对象是一个 TemplateResponse 对象或等价方法)时,才被执行
此方法只在视图中触发异常时才被执行.
>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', '[email protected]', 'johnpassword')
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='john')
>>> u.set_password('new password')
>>> u.save()
is_authenticated()
authenticate()
login()
from django.contrib.auth import authenticate, login
def my_view(request):
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user is not None:
if user.is_active:
login(request, user)
# Redirect to a success page.
else:
# Return a 'disabled account' error message
...
else:
# Return an 'invalid login' error message.
...
from django.contrib.auth.decorators import login_required
@login_required(redirect_field_name='my_redirect_field')
def my_view(request):
pass
from django.contrib.auth.decorators import user_passes_test
def email_check(user):
return user.email.endswith('@example.com')
@user_passes_test(email_check)
def my_view(request):
pass
SessionAuthenticationMiddleware
update_session_auth_hash
本质是 URL 与要为该 URL 调用的视图函数之间的映射表。
from django.conf.urls import url
urlpatterns = [
url(正则表达式, views视图函数, 参数, 别名),
]
本质是一个函数
服务器接收到 http 协议的请求后,会根据报文创建 HttpRequest 对象
属性
方法
request 对象的属性 GET、POST 都是 QueryDict 类型的对象
属性
方法
set_expiry(value)
:设置会话的会话过期/超时时间
缓存就是为了减少数据库 IO,不重复消耗计算资源,Django 拥有一套健壮的缓存系统来保存动态页面,避免每次请求都重新计算,Django 提供了特定视图的输出、可以仅仅缓存那些很难生产出来的部分、或者可以缓存整个网站
setting.py
的 CACHES 配置来实现settings.py
中配置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
'TIMEOUT': 60,
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
缓存整个网站
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
from django.views.decorators.cache import cache_page
urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
]
>>> cache.set('add_key', 'Initial value', 30)
>>> cache.add('add_key', 'New value')
>>> cache.get('add_key')
'Initial value'
>>> cache.set('a', 1)
>>> cache.set('b', 2)
>>> cache.get_many(['a', 'b'])
{'a': 1, 'b': 2}
>>> cache.delete_many(['a', 'b'])
>>> cache.incr('a')
>>> cache.decr('a')