我創建了一個 Django 應用程式,我在其中創建了一個自定義用戶模型并通過 otp 使用登錄。我想在他/她登錄到socialadmin主頁后從自定義用戶模型中獲取用戶的詳細資訊。我在views.py和 .html 檔案上都使用了 user.request.get['member_id] 和 request.POST.get('member_id')但沒有任何成功。我收到錯誤-“無法決議來自'request.POST.get['member']'的余數:'['member_id']'”以下是我的模型-:
User = get_user_model()
class S_Society_Association_Master(AbstractBaseUser):
member_id = models.CharField(verbose_name = "Member_ID", primary_key=True, max_length=100, unique=True)
member_name = models.CharField(verbose_name = "Member Name", max_length=100)
password = models.CharField(verbose_name = "Password", default=NULL, max_length = 100, null=True, blank=True)
member_contact_number = models.CharField(verbose_name="Phone Number", max_length=15)
otp = models.CharField(max_length=6, blank=False, default=0) # For HOTP Verification
member_role = models.CharField(verbose_name="Member's Role", max_length=100,
choices=[("P", "President"), ("T", "Treasurer"), ("S", "Secretary"),
("EC", "EC members"), ("O", "Other members")])
member_email_id = models.EmailField(verbose_name = "Member's Email", max_length=100)
member_from_date = models.DateField(verbose_name = "Member From", auto_now_add=True)
member_to_date = models.DateField(verbose_name="Member To")
created_date = models.DateField(verbose_name = "Created Date", auto_now_add = True, blank=True, null=True)
created_by = models.ForeignKey(User, to_field='id', related_name = "assoc_created_by", on_delete = models.SET_NULL, verbose_name="Created By", max_length=100, blank=True, null=True)
last_updated_date = models.DateField(verbose_name = "Updated Date", auto_now = True, blank=True, null=True)
last_updated_by = models.ForeignKey(User, to_field='id', related_name = "assoc_updated_by", on_delete = models.SET_NULL, verbose_name="Last Updated By", max_length=100, blank=True, null=True)
USERNAME_FIELD = 'member_email_id'
以下是我的views.py -:
def login_attempt(request):
if request.method == 'POST':
mobile = request.POST.get('member_id') #This is what I am using to get member details but it isn't working.
member = S_Society_Association_Master.objects.filter(member_contact_number = mobile).first()
if member is None:
context = {'message' : 'User not found' , 'class' : 'danger' }
return render(request, 'societyadmin/sa_login.html', context)
otp = str(random.randint(1000, 9999))
member.otp = otp
member.save()
message_handler = MessageHandler(mobile, member.otp).send_otp_on_phone()
request.session['mobile'] = mobile
return redirect('login_otp')
return render(request, 'societyadmin/sa_login.html')
def login_otp(request):
mobile = request.session['mobile']
context = {'mobile':mobile}
if request.method == 'POST':
otp = request.POST.get('otp')
member = S_Society_Association_Master.objects.filter(member_contact_number=mobile).first()
if otp == member.otp:
member_row = S_Society_Association_Master.objects.get(member_id = member.member_id)
login(request , member_row)
context = {'message' : 'Welcome', 'member_id': member_row.member_id, 'mobile':mobile }
return render(request,'societyadmin/home.html' , context)
else:
context = {'message' : 'Wrong OTP' , 'class' : 'danger','mobile':mobile }
return render(request,'societyadmin/sa_login_otp.html' , context)
return render(request,'societyadmin/sa_login_otp.html' , context)
def society_admin_home(request):
member_id=request.POST.get['member_id']
return render(request, 'societyadmin/home.html')
助手.py。以下是向手機和電子郵件發送訊息的功能。
from django.conf import settings
from twilio.rest import Client #I am using Twilio to send messages on phone.
from django.core.mail import send_mail
import random
class MessageHandler:
phone_number = None
otp = None
def __init__(self, phone_number, otp) -> None:
self.phone_number = phone_number
self.otp = otp
def send_otp_on_phone(self):
client = Client(settings.ACCOUNT_SID, settings.AUTH_TOKEN)
message = client.messages.create(body = f'Your otp is {self.otp}', from_ = ' 19853323340', to = self.phone_number)
return message
def send_otp_on_email(self):
member_name = self.member_name
member_email = self.member_email_id
subject = 'Login OTP'
message = f'Hi {member_name}, Your otp to login is {self.otp}'
email_from = settings.EMAIL_HOST_USER
recipients = [member_email, ]
send_mail(subject, message, email_from, recipients)
return None
網址.py
from .views import *
urlpatterns = [
path('', login_attempt, name = "login"),
path('home', society_admin_home , name="society_admin_home"),
path('login_otp', login_otp , name="login_otp")
]
請幫忙。
uj5u.com熱心網友回復:
嘗試
request.user
或者
request.user.member_id
request.user['member_id']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/507739.html