fix: exam.view 考试增加redis
This commit is contained in:
parent
129472c13c
commit
1d913c99f4
|
@ -27,6 +27,8 @@ from apps.exam.parse_word import interpret_text
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from django_redis import get_redis_connection
|
||||||
|
import uuid
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
EXCEL_PATH = os.path.join(settings.BASE_DIR, "media/default/question.xlsx")
|
EXCEL_PATH = os.path.join(settings.BASE_DIR, "media/default/question.xlsx")
|
||||||
|
@ -524,6 +526,7 @@ class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
if now < exam.open_time or now > exam.close_time:
|
if now < exam.open_time or now > exam.close_time:
|
||||||
raise ParseError('不在考试时间范围')
|
raise ParseError('不在考试时间范围')
|
||||||
|
ExamRecord.objects.filter(exam=exam, create_by=request.user, is_submited=False).delete()
|
||||||
tests = ExamRecord.objects.filter(
|
tests = ExamRecord.objects.filter(
|
||||||
exam=exam, create_by=request.user)
|
exam=exam, create_by=request.user)
|
||||||
chance_used = tests.count()
|
chance_used = tests.count()
|
||||||
|
@ -685,6 +688,9 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, RetrieveModelMixin, G
|
||||||
courese_ids = [i.id for i in course]
|
courese_ids = [i.id for i in course]
|
||||||
current_date = now_data.strftime('%Y-%m-%d')
|
current_date = now_data.strftime('%Y-%m-%d')
|
||||||
cer_number = now_data.strftime('%Y%m%d')
|
cer_number = now_data.strftime('%Y%m%d')
|
||||||
|
# redis 连接并获取锁
|
||||||
|
redis_conn = get_redis_connection("redis")
|
||||||
|
identifier = acquire_lock(redis_conn, 'certificate', 10)
|
||||||
# 查询证明编号创建时间为最后一个
|
# 查询证明编号创建时间为最后一个
|
||||||
cer = Certificate.objects.latest('证书编号')
|
cer = Certificate.objects.latest('证书编号')
|
||||||
if cer:
|
if cer:
|
||||||
|
@ -706,6 +712,11 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, RetrieveModelMixin, G
|
||||||
serializer = CertificateSerializer(data=data_dict)
|
serializer = CertificateSerializer(data=data_dict)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
serializer.save()
|
serializer.save()
|
||||||
|
# 释放锁
|
||||||
|
if identifier:
|
||||||
|
release_lock(redis_conn, 'certificate', identifier)
|
||||||
|
else:
|
||||||
|
print("没有找到锁")
|
||||||
|
|
||||||
er.took = (now - er.create_time).total_seconds()
|
er.took = (now - er.create_time).total_seconds()
|
||||||
er.end_time = now
|
er.end_time = now
|
||||||
|
@ -713,3 +724,33 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, RetrieveModelMixin, G
|
||||||
er.is_submited = True
|
er.is_submited = True
|
||||||
er.save()
|
er.save()
|
||||||
return Response(ExamRecordListSerializer(instance=er).data)
|
return Response(ExamRecordListSerializer(instance=er).data)
|
||||||
|
|
||||||
|
|
||||||
|
def acquire_lock(redis_conn, lock_name, ttl):
|
||||||
|
identifier = str(uuid.uuid4())
|
||||||
|
lock = redis_conn.set(lock_name, identifier, nx=True, ex=ttl)
|
||||||
|
return identifier if lock else None
|
||||||
|
|
||||||
|
|
||||||
|
import redis
|
||||||
|
def release_lock(redis_conn, lock_name, identifier):
|
||||||
|
with redis_conn.pipeline() as pipe:
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
pipe.watch(lock_name)
|
||||||
|
# 使用 multi/exec 模式来确保原子性
|
||||||
|
if pipe.get(lock_name) == identifier:
|
||||||
|
pipe.multi()
|
||||||
|
pipe.delete(lock_name)
|
||||||
|
pipe.execute()
|
||||||
|
return True
|
||||||
|
# 如果锁已经被修改,取消监视
|
||||||
|
pipe.unwatch()
|
||||||
|
return False
|
||||||
|
except redis.exceptions.WatchError:
|
||||||
|
# 如果在监视期间锁被修改,重试
|
||||||
|
continue
|
||||||
|
except redis.exceptions.RedisError as e:
|
||||||
|
print(f"Error releasing lock: {e}")
|
||||||
|
return False
|
|
@ -196,14 +196,14 @@ AUTHENTICATION_BACKENDS = (
|
||||||
|
|
||||||
# 缓存配置
|
# 缓存配置
|
||||||
CACHES = {
|
CACHES = {
|
||||||
# "default": {
|
"redis": {
|
||||||
# "BACKEND": "django_redis.cache.RedisCache",
|
"BACKEND": "django_redis.cache.RedisCache",
|
||||||
# "LOCATION": "redis://127.0.0.1:6379/9",
|
"LOCATION": "redis://127.0.0.1:6379/1",
|
||||||
# "OPTIONS": {
|
"OPTIONS": {
|
||||||
# "CLIENT_CLASS": "django_redis.client.DefaultClient",
|
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||||
# # "PICKLE_VERSION": -1
|
# "PICKLE_VERSION": -1
|
||||||
# }
|
}
|
||||||
# }
|
},
|
||||||
'default': {
|
'default': {
|
||||||
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
||||||
'LOCATION': os.path.join(BASE_DIR, 'temp'),
|
'LOCATION': os.path.join(BASE_DIR, 'temp'),
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
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
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
|
@ -1,36 +1,36 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIF+DCCBGCgAwIBAgIQexRxjj+11hqqdmSmDPdOlzANBgkqhkiG9w0BAQwFADBZ
|
MIIF+jCCBGKgAwIBAgIRAIa1G6aR/Fioa94iEdzo93AwDQYJKoZIhvcNAQEMBQAw
|
||||||
MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg
|
WTELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs
|
||||||
SW5jLjEjMCEGA1UEAxMaVHJ1c3RBc2lhIFJTQSBEViBUTFMgQ0EgRzIwHhcNMjQw
|
IEluYy4xIzAhBgNVBAMTGlRydXN0QXNpYSBSU0EgRFYgVExTIENBIEcyMB4XDTI0
|
||||||
NDI4MDAwMDAwWhcNMjQwNzI3MjM1OTU5WjAfMR0wGwYDVQQDExR0ZXN0c2VhcmNo
|
MDcyNTAwMDAwMFoXDTI0MTAyMzIzNTk1OVowHzEdMBsGA1UEAxMUdGVzdHNlYXJj
|
||||||
LmN0Yy5hYy5jbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK7PhH8d
|
aC5jdGMuYWMuY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDcn5Lx
|
||||||
qp3Hgpff2f0nc08XCLGrDdPpoQqCDSVfMKwQHosh1A25pvgOGhFWIuFt1NosO+iC
|
Rl1ea9Vla6HXZhmECotpR6vVdIQOXr+clRzzvQP9WehjNi790GB2uItGTf59vhSW
|
||||||
i17g5QYWf3ExyLlBs9mMKXhMGT8tSX0XhVs/QH4+pgZ4t9D2YyFzQr7gq7YqqKrq
|
L+O7YBw8uDoTWSk3Tx1eYz3kuC4wCCEAouPA538IyaDxzlKEu7p0e9vyldbK37Cb
|
||||||
EEnwNY+B60l6y0A/hoUu/BvO3Uy9YLp0i4jqxCPTgOXZp7lpqLYKHgSLffFN9caM
|
v6DvhDu6dbDRU6E0bm+M+M/2k2umIWHkHBLKJHoMWS0usdzRt9BsacPwhGb9zasV
|
||||||
XE3GFgqDPEZH6nJSY4IfUoXvz6FbwTxo7wf53WDcBTOst4GZpew3RKR7Ng66LSbm
|
cqae3BAMhkW0sKakYrNRvpRRyenQFa4CpnTz35Xbiqgp/m8NcZ+vj/7bbnbYB2xv
|
||||||
5YNqe5eAdEtKx2kOQdw607SOrZ80yKYv4the4iJwgm7A2CE2W9HrOhtTgmPquflC
|
RECNWME+N9shEhvp0t8Iks5Zx7JAH2t6pindzr9kYnExOZvvj1eILTo+JJUKZudI
|
||||||
cjn3dWoYwHaUB2UCAwEAAaOCAnQwggJwMB8GA1UdIwQYMBaAFF86fBEQfgxncWHc
|
nMo8lINRACa4CTvNAgMBAAGjggJ1MIICcTAfBgNVHSMEGDAWgBRfOnwREH4MZ3Fh
|
||||||
i6O1AANn9VccMB0GA1UdDgQWBBTV7evfTKgBsYGqCBrDMmQaKGNOfzAOBgNVHQ8B
|
3IujtQADZ/VXHDAdBgNVHQ4EFgQU/YrAK+ohcvVU/+CvttRblIR/+wkwDgYDVR0P
|
||||||
Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
|
AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
|
||||||
BQUHAwIwSQYDVR0gBEIwQDA0BgsrBgEEAbIxAQICMTAlMCMGCCsGAQUFBwIBFhdo
|
AQUFBwMCMEkGA1UdIARCMEAwNAYLKwYBBAGyMQECAjEwJTAjBggrBgEFBQcCARYX
|
||||||
dHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBAgEwfQYIKwYBBQUHAQEEcTBv
|
aHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwCAYGZ4EMAQIBMH0GCCsGAQUFBwEBBHEw
|
||||||
MEIGCCsGAQUFBzAChjZodHRwOi8vY3J0LnRydXN0LXByb3ZpZGVyLmNuL1RydXN0
|
bzBCBggrBgEFBQcwAoY2aHR0cDovL2NydC50cnVzdC1wcm92aWRlci5jbi9UcnVz
|
||||||
QXNpYVJTQURWVExTQ0FHMi5jcnQwKQYIKwYBBQUHMAGGHWh0dHA6Ly9vY3NwLnRy
|
dEFzaWFSU0FEVlRMU0NBRzIuY3J0MCkGCCsGAQUFBzABhh1odHRwOi8vb2NzcC50
|
||||||
dXN0LXByb3ZpZGVyLmNuMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYAdv+IPwq2
|
cnVzdC1wcm92aWRlci5jbjCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB2AHb/iD8K
|
||||||
+5VRwmHM9Ye6NLSkzbsp3GhCCp/mZ0xaOnQAAAGPIp9pcAAABAMARzBFAiAPFwsT
|
tvuVUcJhzPWHujS0pM27KdxoQgqf5mdMWjp0AAABkOrIbCgAAAQDAEcwRQIhAKMh
|
||||||
MTHT+pW/FPjFDO6DsZ7nYBM0IUK7g15j5EK9bgIhAIeT4eBXZdQTbf8kuVz9EWbI
|
WiCNFtHEtcomCMpuZNT4biC6PC3tssg/q9xwlkCeAiBdywwLj6WslkEhABd/ryKi
|
||||||
rFi4HCc1N2rha6gMMT4eAHYAPxdLT9ciR1iUHWUchL4NEu2QN38fhWrrwb8ohez4
|
+vgLV9p8N/yyoLaJijuJFwB3AD8XS0/XIkdYlB1lHIS+DRLtkDd/H4Vq68G/KIXs
|
||||||
ZG4AAAGPIp9pGgAABAMARzBFAiEA4BiPF2rZW5q8Tm9MzN5p+Kw1JSly5aUxSyW/
|
+GRuAAABkOrIbAgAAAQDAEgwRgIhANI2dmapoZ+UNug9z2k4f7nYgo/ivoWeSUTB
|
||||||
lq6A75ACIAaQ7Elxeh1jdJ+95sgWCvzPKzdxFNf6GeN2D/J+8eCdMB8GA1UdEQQY
|
qBz4HKGMAiEAy8XRkgBuLCFA5o5C2y8kV2cxSRH7/SFRis/8pD9KFCYwHwYDVR0R
|
||||||
MBaCFHRlc3RzZWFyY2guY3RjLmFjLmNuMA0GCSqGSIb3DQEBDAUAA4IBgQCWRf25
|
BBgwFoIUdGVzdHNlYXJjaC5jdGMuYWMuY24wDQYJKoZIhvcNAQEMBQADggGBAFWX
|
||||||
QmMBQ6PnR2d7ITksepeHFWWp1iqF1sUz4XGvEqXvPIideGHXbSV+2mwspFtf9aEd
|
4/J0bJftykwPa7RwkSWqID39bx4WUJNBDbaDtPod49dd9xSVvN4ZPCEdAOr7OL8l
|
||||||
Xy8R7RbbCbs+RfQ/nNMHECKChwdnDUOs/9v2yLE2ZPaJtO+P2/FenOBVfxDMjhd6
|
Yb+YVdSraKaZy+G/8gY8HxRjRAisEXOeyVmhcMl0P4vOf8SfBw8FQq4J+gLidV7+
|
||||||
yrFXwojUM3PI1gJz+a5LRq8Jqun8DcBuYGSQNS1mM32pwKEpoxmvMe1WYB5ZtYc7
|
gW2vnCFv9F5alPN44UXWUOevN7EFsv+XWW0Jbnuat5pvH4r38z/pnFdKWp1fiMOS
|
||||||
fbUq+TD0UgAgyiFbXvnRK1fgZn2v2ue2Cm9JsDsW0ouj9uhifLP0VlfUvUHvYEOh
|
T/AyqWTtS2fzvbc6RjpuwPdkR4MyFI0KfKDWuEhUma9aJRhXKLVG1iJOqzuVpE7l
|
||||||
0C2lyIfOyvgz2u5YJmi7uJrM8cssDv6roOyCJLTnH8iwbqskMlaIEDt2b3Nu2cLZ
|
mYXq4yla3SlY3kfTR9rT+2KKG4TYxJCHkimx9rkBD5P/RGAAwH9IJs2UkCGiA+3i
|
||||||
x6iN8sgx4W+UYzMl0jWZ6Vgt5F9wuhPnMOPozxNWwYO7JlrTdLGF0JAFLS5kR3vD
|
VcNeUsrMsOQ9qFk7vtDgBCN+mx1pt6/gWGZKsyjZtmqzyVoCp8dv0AE/2skpYSSQ
|
||||||
HPtRrjwV6Wqlrq4pCPq+T6jmDgQNah2A2vTbuTelJkVYppYE2Pi6l+lfmGDGACzf
|
1QXMJIK/uyvNRgPfQqbXaxhZq6loukIydIIJEAXit8SBnFaKvYXluiywModpYXBP
|
||||||
zW3IJ+kXW8gw8zxlnU0fC5YlY8ItxBhmVkOFqWG78Tuw9QjWDxhS6fJuisE=
|
85rtLnuVjgg615uSEkaI7okU74RgN0IFI7q2sOP1j5YeSX0srQTwV5Aw4nhrWA==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIFBzCCA++gAwIBAgIRALIM7VUuMaC/NDp1KHQ76aswDQYJKoZIhvcNAQELBQAw
|
MIIFBzCCA++gAwIBAgIRALIM7VUuMaC/NDp1KHQ76aswDQYJKoZIhvcNAQELBQAw
|
||||||
|
|
Loading…
Reference in New Issue