Django:之安全、国际化和session

Django 安全

以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议。

关于安全的官方文档:https://docs.djangoproject.com/en/dev/#security

官方文档包括以下几个方面:

Django表单用在模版中的时候我们会加一句{% csrf_token %}

Django 国际化

Django官方教程:https://docs.djangoproject.com/en/1.7/#internationalization-and-localization

Django支持国际化,多语言。Django的国际化是默认开启的,如果您不需要国际化支持,那么您可以在您的设置文件中设置USE_I18N = False,那么Django会进行一些优化,不加载国际化支持机制。

NOTE: 18表示Internationlization这个单词首字母I和结尾字母N之间的字母有18个。I18N就是Internationlization的意思。

Django完全支持文本翻译,日期时间数字格式和时区。

本质上讲,Django做了两件事:

1、它允许开发者指定要翻译的字符串

2、Django根据特定的访问者的偏好设置,进行调用相应的翻译文本。

开启国际化的支持,需要在settings.py文本中设置

MIDDLEWARE_CLASSES = (
    ...
    ‘django.middleware.locale.LocaleMiddleware‘,
)

LANGUAGE_CODE = ‘en‘
TIME_ZONE = ‘UTC‘
USE_I18N = True
USE_L10N = True
USE_TZ = True

LANGUAGES = (
    (‘en‘, (‘English‘)),
    (‘zh-cn‘, (‘中文简体‘)),
    (‘zh-tw‘, (‘中文繁體‘)),
)

#翻译文件所在目录,需要手工创建
LOCALE_PATHS = (
    os.path.join(BASE_DIR, ‘locale‘),
)

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    "django.core.context_processors.i18n",
)

生成需翻译的文本

django-admin.py makemessages -l zh-cn
django-admin.py makemessages -l zh-tw

手工翻译locale中的文本后,我们需要编译以下,这样翻译才会生效

django-admin.py compilemessages

Django session

Django 完全支持也匿名会话,简单说就是使用跨网页之间可以进行通讯,比如显示用户名,用户是否已经发表评论,session框架让你存储盒获取访问者的数据信息,这些信息保存在服务器上(默认是数据库中),以cookies的方式发送和获取一个包含session ID的值,并不是用cookies传递数据本身。

启用session

编辑settings.py中的一些配置

MIDDLEWARE_CLASSES确保其中包含以下内容

‘django.contrib.sessions.middleware.SessionMiddleware‘,

INSTALLED_APPS是包含

‘django.contrib.sessions‘,

这些是默认启用的。如果你不用等话,也可以关掉这个以节省一点服务器的开销。

提示:您也可以配置使用比如cache来存储session

在视图中使用session

request.session可以在视图中任何地方使用,它类似于python中的字典

session默认有效时间为两周,可以在settings.py中修改默认值:参加这里

# 创建或修改 session:
request.session[key] = value
# 获取 session:
request.session.get(key,default=None)
# 删除 session
del request.session[key] # 不存在时报错

session例子

比如写一个不让用户评论两次的应用:

from django.http import HttpResponse

def post_comment(request, new_comment):
    if request.session.get(‘has_commented‘, False):
        return HttpResponse("You‘ve already commented.")
    c = comments.Comment(comment=new_comment)
    c.save()
    request.session[‘has_commented‘] = True
    return HttpResponse(‘Thanks for your comment!‘)

一个简化的登陆认证:

def login(request):
    m = Member.objects.get(username=request.POST[‘username‘])
    if m.password == request.POST[‘password‘]:
        request.session[‘member_id‘] = m.id
        return HttpResponse("You‘re logged in.")
    else:
        return HttpResponse("Your username and password didn‘t match.")

def logout(request):
    try:
        del request.session[‘member_id‘]
    except KeyError:
        pass
    return HttpResponse("You‘re logged out.")

当登陆时验证用户名和密码,并保存用户id在session中,这样就可以在视图中使用request.session[‘member_id‘]来检查用户是否登陆,当退出的时候,删除掉它。

时间: 2024-10-13 21:18:32

Django:之安全、国际化和session的相关文章

Python+Django+SAE系列教程16-----cookie&session

本章我们来讲解cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其用法,首先是cookie,我们在view中添加三个视图,一个是显示cookie的,一个是设置cookie的,如下: def show_cookie(request): if "MyTestCookie" in request.COOKIES: return HttpResponse("Cookie[MyTestCookie]的内容是: %s" % request

第十一章 Django框架学习——Cookie和session

第十一章 Django框架学习--Cookie和session 一.Cookie简介 二.装饰器版登录校验 三.session简介 四.如何在CBV中使用装饰器 一.Cookie简介 什么是Cookie(what): Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的原理:由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

Django中使用cookie和session

目录 Django中使用cookie与session 一.cookie 二.session Django中使用cookie与session 一.cookie cookie的由来:由于HTTP协议是无状态的,每次请求都是独立的请求,为了能够保存某些数据,cookie便产生了. 什么是cookie:cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对.下次访问服务器的时候,浏览器会自动携带这些键值对,以便服务器提取有用数据. cookie的原理:cookie的工作原理是:

Django分析之国际化处理

最近在公司终于开始做web开发了,本以为会是简单的首页之类的小规模项目,结果上来就是一个处理大数据分析的项目,一个关于油品分析的系统,不过我接到的第一个任务是做这个网站的国际化处理,虽然项目还没有上线,还差的很多,但是国际化这个东西使用的是Django自带的来处理的,所以在一边写项目的时候就要写好国际化的代码,所以我现在就开始处理我的国际化了. 大家可以在Django Doctment上看官方的说明,我在这里就不复制官方文档了,django框架带有完善的I18N和L10N支持,其实现是基于GNU

Django入门(八)   cookie和session

前几节的介绍中我们已经有能力制作一个登陆页面,在验证了用户名和密码的正确性后跳转到后台的页面.但是测试后也发现,如果绕过登陆页面.直接输入后台的url地址也可以直接访问的.这个显然是不合理的.其实我们缺失的就是cookie和session配合的验证.有了这个验证过程,我们就可以实现和其他网站一样必须登录才能进入后台页面了. 先说一下这种认证的机制.每当我们使用一款浏览器访问一个登陆页面的时候,一旦我们通过了认证.服务器端就会发送一组随机唯一的字符串(假设是123abc)到浏览器端,这个被存储在浏

Django中的cookie与session

cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来自同一人的连续请求.上图很明显的展示了Django的session与cookie的实现原理.服务器会生成两份相同的cookie字符串,一份保存在本地,一份发向求情的浏览器.浏览器将收到的cookie字符串保存下来,当下次再请求时,会将这段cookie发送到服务器,服务器得到这段cookie会与本地保

Django的文本国际化

1.表示需要翻译的文本:在python原文件和HTML等模板文件中都可以标识需要翻译的文本,在python源文件通过_()或者ueettext()函数表达需要翻译的需求.在模板文件中,用{%trans %}标签表达翻译需求. 2.创建语言文件:语言文件是Django找那个用于保存翻译关系的文件,网站应该为每种支持的语言建立一个语言文件,建立语言文件的方法是在项目根目录中执行如下命令: django -admin makemessages -l zh_CN 该条命令会在当前目录及子目录的pytho

Django中的cookie和session

cookies 客户端浏览器上的一个文件 {'user':'xiaoyanzi'} 获取cookie: request.COOKIES.get('username') 写cookie: #设置cookie,关闭浏览器失效 response = render(request,'index.html') response = redirect('/index/') response.set_cookie('key','value') return response cookies参数 #cookie