(Django) Нужна помощь в получении информации из базы данных
Итак, давайте попробуем еще раз, я очень новичок в программировании и мало что понимаю в специфике, так что потерпите немного, я делаю сайт с системой входа и продажи билетов, я следовал учебнику и сделал систему входа, используя Django authenticate и login
(Views.py показан в двух частях, чтобы было легче понять, по крайней мере, я надеюсь на это)
Views.py (Регистрационная часть)
from django.contrib.auth import authenticate, login
#Registering system, requires that both passwords area equal to register
def cadastro(request):
return render(request,'cadastro.html')
def store(request):
data = {}
if(request.POST['password'] != request.POST['password-conf']):
data['msg'] = 'Senhas diferentes! Tente Novamente'
data['class'] = 'alert-danger'
else:
user = User.objects.create_user(request.POST['user'], request.POST['email'], request.POST['password'])
user.save()
data['msg'] = 'Usuário cadastrado com sucesso!'
data['class'] = 'alert-success'
return render(request,'cadastro.html',data)
Cadastro.hmtl
<form name="form-users" id="formUsers" method="post" action="/store/">
<div class="col-4 mt-4 m-auto">
{% if msg %}
<div class="alert {{class}}">
{{msg}}
</div>
{% endif %}
{% csrf_token %}
<input class="form-control mt-4" type="text" name="user" id="user" placeholder="Nome de Usuario:">
<input class="form-control mt-4" type="email" name="email" id="email" placeholder="Email:">
<input class="form-control mt-4" type="password" name="password" id="password" placeholder="Senha:">
<input class="form-control mt-4" type="password" name="password-conf" id="password-conf" placeholder="Repita a Senha:">
<input class="btn btn-primary mt-4" type="submit" value="Cadastrar">
<a href="/loginv">Ja tem uma conta? Faça Login</a>
</div>
</form>
Views.py(Login part)
from django.contrib.auth import authenticate, login
#Login system
def loginv(request):
return render(request,'loginv.html')
def loginr(request):
data = {}
user = authenticate(username=request.POST['user'], password=request.POST['password'])
if user is not None:
login(request, user)
return redirect('/dashboard/')
else:
data['msg'] = 'Usuário ou Senha inválidos!'
data['class'] = 'alert-danger'
return render(request,'loginv.html',data)
loginv.html
<form name="form-login" id="formLogin" method="post" action="/loginr/">
<div class="col-4 mt-4 m-auto">
{% if msg %}
<div class="alert {{class}}">
{{msg}}
</div>
{% endif %}
{% csrf_token %}
<input class="form-control mt-4" type="text" name="user" id="user" placeholder="Nome de Usuario:">
<input class="form-control mt-4" type="password" name="password" id="password" placeholder="Senha:">
<input class="btn btn-primary mt-4" type="submit" value="Entrar">
<a href="/cadastro">Ainda não tem uma conta? Cadastre-se</a>
</div>
</form>
Итак, обе эти таблицы используются и все работает нормально, но я не объявил их в models. py и теперь я не знаю, как получить их из базы данных, я предполагаю, что таблицы пришли автоматически с Django или когда я создал проект, но я действительно не знаю, я был бы очень признателен, если бы кто-нибудь мог объяснить мне это, также, поскольку мое сообщение было закрыто из-за недостаточной информации, я размещу временную форму тикета и models.py на всякий случай, они тоже работают просто отлично, но мне нужно имя пользователя, чтобы действительно сделать тикет
ticket.html
{% block content %}
{% if request.user.is_authenticated %}
<form name="form-ticket" id="formTicket" method="POST" action="/ticketr/">
<div class="col-4 mt-4 m-auto">
{% if msg %}
<div class="alert {{class}}">
{{msg}}
</div>
{% endif %}
{% csrf_token %}
<input class="form-control mt-4" type="text" name="numctt" id="numctt" placeholder="Numero para contato:">
<input class="form-control mt-4" type="text" name="nomctt" id="nomctt" placeholder="Nome para contato:">
<input class="form-control mt-4" type="int" name="areaserv" id="areaserv" placeholder="Area do servico:">
<input class="form-control mt-4" type="int" name="tiposerv" id="tiposerv" placeholder="Tipo de servico:">
<input class="form-control mt-4" type="text" name="tickettext" id="tickettext" placeholder="Descricao:">
<input class="btn btn-primary mt-4" type="submit" value="Entrar">
</div>
</form>
{% else %}
Você não tem acesso a essa área!
{% endif %}
{% endblock %}
models.py
from django.db import models
# Create your models here.
class Userdb(models.Model):
ticketid = models.AutoField(primary_key=True)
nomctt = models.CharField(max_length=50)
numctt = models.CharField(max_length=9)
tiposerv = models.IntegerField()
areaserv = models.IntegerField()
tickettext = models.CharField(max_length=200)
class Meta:
db_table = 'dbuser'
Я не знаю, как получить данные, собранные системой аутентификации Django
Наверное, таблицы появились автоматически вместе с Django или при создании проекта, но я не знаю
.
Да, именно так. Django поставляется с собственной системой аутентификации django.contrib.auth
, которая включена по умолчанию (docs).
Если вы используете это, то вам нужно будет запросить модели этого django.contrib.auth
модуля, как описано здесь, например:
from django.contrib.auth.models import User
print(User.objects.all())
Альтернативно, вы можете использовать функцию get_user_model, чтобы получить ссылку на текущую модель пользователя:
from django.contrib.auth import get_user_model
user_model = get_user_model()
print(user_model.objects.all())
Это более надежный вариант на случай, если вы решите создать свою собственную модель пользователя.
ОБНОВИТЬ
О, это очень помогает, это было то, что я искал, но как мне отобразить это на HTML, например, как мне отобразить имя пользователя
Чтобы получить имя пользователя объекта User, используйте атрибут username: user_object.username
. Чтобы отобразить имя пользователя в вашем шаблоне, вы должны включить его в контекст, доступный шаблону. Например, в ваших представлениях, поскольку вы используете функцию render, data
- это контекст шаблона. Вы можете добавить объект user или имя пользователя в данные:
def store(request):
data = {}
if(request.POST['password'] != request.POST['password-conf']):
...
else:
user = User.objects.create_user(request.POST['user'], request.POST['email'], request.POST['password'])
user.save()
data['msg'] = 'Usuário cadastrado com sucesso!'
data['class'] = 'alert-success'
data['user'] = user
data['username'] = user.username
return render(request,'cadastro.html',data)
Тогда вы можете использовать это в своем шаблоне:
{% block content %}
{% if request.user.is_authenticated %}
<p>Hello, user '{{ user.username }}'</p>
<p>Hello, user '{{ username }}'</p>
...
Чтобы легко получить текущего вошедшего пользователя, можно использовать атрибут user объекта запроса. Включите запрос в контекст вашего шаблона data['request'] = request
и затем вы можете просто использовать его в шаблоне:
<p>Hello, user '{{ request.user.username }}'</p>