Как я могу хранить данные о регистрации в моей базе данных django?
Я хочу сохранить данные пациента со страницы регистрации в мою базу данных django, используя сериализаторы, но я не уверен, как это сделать!!!
Здесь я прилагаю views.py файл:
from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import render,redirect
from django.contrib import messages
from django.contrib.auth import authenticate,login,logout
from rest_framework import viewsets
from .models import *
from .serializers import PatientSerializer
class PatientView(viewsets.ModelViewSet):
queryset = patient.objects.all()
serializer_class = PatientSerializer
def login_user(request):
if request.method == 'POST':
username = request.POST['Username']
password = request.POST['Password']
user_type = request.POST['user_type']
user = authenticate(username=username, password=password)
#doctor is superuser and receptionist is normaluser
if user is None:
login(request, user)
if user_type == 'Doctor':
return render(request,'')
elif user_type == 'Receptionist':
return render(request, 'Auth/registration.html')
else:
return render(request,'')
else:
messages.error(request, "Bad Credentials")
return redirect('login')
return render(request, "Auth/login.html")
def registration(request):
if request.method == "POST":
username = request.POST['username']
PID = request.POST['PID']
Name = request.POST['Name']
Age = request.POST['Age']
DOB = request.POST['DOB']
gender = request.POST['gender']
BG = request.POST['BG']
PN = request.POST['PN']
Add = request.POST['Add']
else:
if request.user.is_staff:
return render(request,'Auth/registration.html')
else:
return HttpResponseForbidden('<h1> 403 Forbidden <br>You are not allowed to access this page.</h1>')
Это мой registration.html файл :
Это мой models.py файл:
from django.db import models
from django import forms
User_type = (
("Doctor", "Doctor"),
("Receptionist", "Receptionist"),
("View Patient","View Patient"),
)
Gender = (
("Male", "Male"),
("Female", "Female"),
("Other","Other"),
)
Blood_group = (
("A+","A+"),
("A-","A-"),
("B+","B+"),
("B-","B-"),
("AB+","AB+"),
("AB-","AB-"),
("O+","O+"),
("O-","O-"),
)
class Doctor(models.Model):
Username = models.CharField(max_length=200)
Password = models.CharField(max_length=32)
type = models.CharField(max_length=10,default='doctor')
def __str__(self):
return self.Username
def is_doctor(self):
return self.type
class receptionist(models.Model):
Username = models.CharField(max_length=200)
Password = models.CharField(max_length=32)
type = models.CharField(max_length=10,default='Receptionist')
def __str__(self):
return self.Username
def is_receptionist(self):
return self.type
class patient(models.Model):
Patient_ID = models.CharField(max_length=200)
Name = models.CharField(max_length=200)
Age = models.CharField(max_length=200)
DOB = models.DateTimeField()
Gender = models.CharField(max_length=200 ,choices=Gender)
BloodGroup = models.CharField(max_length=200 ,choices=Blood_group)
Phone = models.CharField(max_length=200)
Address = models.CharField(max_length=200)
и это serializers.py файл:
from rest_framework import serializers
from .models import *
class PatientSerializer(serializers.ModelSerializer):
class Meta:
model = patient
fields = ("PID", 'Name', 'Age', 'DOB', 'gender', 'bg', 'pn', 'Add' )
Я не уверен, что сериализатор нужен или нет, но один из моих друзей сказал, что вы можете использовать сериализаторы для этого, поэтому я использовал его, если он не нужен, то подскажите мне другой способ!!!
И вообще, я работаю над этим проектом, поэтому некоторые вещи могут быть не сделаны, так что не обращайте внимания на эти вещи, я просто хочу сохранить информацию о пациенте в моей базе данных. Так что, пожалуйста, помогите мне найти решение. Спасибо!!!
Чтобы сохранить новую запись объекта в вашей базе данных, сделайте это следующим образом, в вашей registration функции в файле views.py:
from . import patient
new_patient = patient(Name=Name, Age=Age, gender=Gender) #include all properties here
new_patient.save()
В директории, где живут ваши models.py и views.py создайте файл, если он еще не существует forms.py и добавьте следующий код.
В файле forms.py
from . import models
from django import forms
from .models import patient
# Create your forms here
class PatientForm(forms.Form):
class Meta:
model = patient
# If you want all fields of your model then un-comment the below
# and comment the next line
# fields = '__all__'
fields = ("PID", "Name", "Age", "DOB", "gender", "bg", "pn", "Add")
В views.py
from .forms import PatientForm
def registration(request):
form = PatientForm()
# When method is post
if request.method == "POST":
# Populate form with data posted
form = PatientForm(request.POST)
# Checking form validity
if form.is_valid():
# Save data to the db
form.save()
return # do something
# When form is not valid
else:
# Re-render the page with existing data
return render(request, "Auth/registration.html", {"form": form})
# When method is not post
else:
if request.user.is_staff:
return render(request, "Auth/registration.html", {"form": form})
else:
return HttpResponseForbidden("<h1> 403 Forbidden <br>You are not allowed to access this page.</h1>")
В файле registration.html
<form>
{% csrf_token %}
<!-- Any other thing you want -->
{{ form }}
<!-- Any other thing you want -->
</form>
Сериализаторы позволяют преобразовывать наборы запросов или экземпляры моделей в собственные типы данных Python, которые затем могут быть легко преобразованы в JSON, XML или другие типы контента. Если вы просто хотите получать информацию о пациентах в базу данных, то нет необходимости возиться со сложностями JSON или XML. Вы можете просто использовать django forms и сохранять данные. Просто создайте файл forms.py и введите в него:
from django import forms
from .models import Patient
class PatientForm(forms.ModelForm):
class Meta:
.....
А затем перейдите к созданию полной формы точно так же, как вы создавали модель, т.е. используя классы. После создания формы вы можете отредактировать ее мета-свойства, чтобы при необходимости придать ей стиль, или просто придать стиль при определении полей. Затем вы можете отобразить форму на веб-странице, передав ее в качестве контекстной переменной в представлении веб-страницы, то есть в файле views.py. Затем в HTML веб-страницы вы передаете форму как тег, возможно, что-то вроде {{form.as_p}}. Это должно работать просто замечательно. Однако, если вы действительно хотите использовать сериализаторы для выполнения этой задачи, вы можете использовать javascript на веб-странице для отправки JSON обратно на сервер и затем сохранить его таким образом. Хотя, это кажется излишне сложным и не является способом Django. PS: from .models import * - это ужасный способ импорта моделей. Пожалуйста, будьте конкретны при импорте модулей/классов в Python.