Django之Memcached安装与使用

Memcached顾名思义就是memory + cache,是关于内存缓存的,专业讲是一种高性能且分布式的内存对象缓存系统。它在内存中维护一个庞大的哈希表。通过使用Memcached,它首先会检查客户端的请求数据是否在Memcached中,如果存在的话,则将它发送给客户端,不会去查数据库。如果不存在,就会去查数据库,再将查到的数据缓存一份到Memcached,然后发送给客户端。Memcached的数据会和数据库中的数据同步更新。

1.安装Windows版的Memcached

1.1 管理员权限打开终端,切换至含有memcached.exe的目录,并执行如下命令:

memcached -d install

1.2 启动memcached服务,并执行如下命令:

net start "Memcached Server"

1.3 pip安装Python操作Memcached的绑定程序

pip install python-memcached

1.4 Django的settings.py中添加配置:

CACHES = {
	'default': {
		'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
		'LOCATION': '主机IP: 11211,'
		# Memcached可以在多台服务器上共享缓存(分布式),通过LOCATION指定多台机器的地址和端口号,如:
		"""
		'LOCATION': [
			’10.12.111.10: 11211‘,
			'10.12.111.11: 11211',	
		]
		"""
	}
}

Memcached的使用

models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class MyUser(AbstractUser):
	# verbose_name表示在admin页面中显示的名称
	tel = models.CharField(max_length=20, verbose_name='联系电话')
	qq = models.CharField(max_length=15, verbose_name='QQ')
	wechat = models.CharField(max_length=20, verbose_name='微信')
	
	class Meta:
		db_table = "myusers"
		verbose_name_plural = '用户'   # 设置在admin下显示的名称,plura指复数形式,即系统不会在渲染时加'+'

views.py

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required


# 使用AbstractUser时,注册用户使用create_user,而不是create。且create_user在数据库中存储的密码为加密模式。
MyUser.objects.create_user(username=name, password=pwd, address=address, phone=phone)
# 用户登录时使用authenticate()验证,错误返回None
user = authenticate(username=name, password=pwd)
# 验证成功后使用login()来开启session
login(request, user)
# 在重定向至登录后页面时,将错误信息再次重定向
@login_required
def go_success(request):
    # 使用login_required装饰器时,只有在用户登录的情况下才能
    # 调用,否则,则未登录用户被重定向到settings.py中配置的LOGIN_URL指定的
   #  路由地址;或者通过@login_required(login_url="未登录重定向地址")设置。    return render(request, 'auth_app/result.html')
"""
settings.py中设置:
LOGIN_URL = "/auth/noLogin/"  # 未登录用户跳转路径
AUTH_USER_MODEL = 'auth_app.MyUser'   # 使用AbstractUser时,需将子类在settings.py中注册一下
"""

你可能感兴趣的:(Python,Django)