我是Django的新手。我的任务是设计一个后端,其中将有登录系统(使用django提供的默认用户表)。还有另外两个表,一个是图像表,其中包含imgvalue列,其中包含来自redis数据库的密钥。另一个表(imgacl)是为用户提供访问控制,以查看所需用户有权访问的特定图像。 redis数据库实际上是使用键值对存储图像,并且该键存储在imgvalue列中。这是我的代码:
models.py:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Image(models.Model):
imgvalue = models.Charfield(max_length =250)
class Imageacl(models.Model):
id = models.ForeignKey(Image,on_delete =models.CASCADE)
userlist= models.Textfield(null=True)
用户列表包含可以查看特定图像的用户列表。 一个单独的python程序,用于在Redis db中存储50个图像。假设有5个用户,user1可以查看10个图像,user2可以查看15个图像...
import redis
from PIL import Image
rd = redis.StrictRedis()
for x in range(1,51):
img = open("{}.jpg".format(x),"rb").read()
rd.set("key{}".format(x),img)
我有两个问题:
1)我如何将redis与django&
集成
2)我将如何为用户提供访问控制?
答案 0 :(得分:0)
您可以使用redis存储对图像的引用,并存储实际图像:
在服务器中,如果您允许系统以有效的方式提供静态文件(请记住,如果文件共存于同一服务器中,提供文件的确也会降低应用程序的性能)
像S3这样的对象存储服务,可以为您提供出色的性能,以提供这些图像。
在redis中,存储图片的网址字符串:
import boto3
s3 = boto3.resource('s3')
buck = s3.Bucket('name')
for object in buck.objects.all():
# print(object)
rd.set("key{}".format(x), object.key)
或者如果您将图像存储在文件系统中:
import os
folder=os.listdir("path/to/img/")
for file in folder:
rd.set("key{}".format(x), "path/to/img/%s"%file )
要实现用户访问控制,请看一个this问题,有几个django模块可用于获得粒度访问控制。