обработка форм в django (вопрос для начинающих)
-
07-07-2019 - |
Вопрос
Я в первую очередь специалист по PHP.Как бы я обрабатывал формы в django?Мне удалось создать форму, модель и представление.Теперь я хочу сохранить свои данные в базе данных.
#forms.py
from django import forms
import datetime
class CommentForm(forms.Form):
name = forms.CharField(initial='Your name')
comment = forms.CharField(initial='You comment')
commend_date = forms.DateField(initial=datetime.date.today);
posted_by = forms.CharField(max_length=200)
И мой взгляд на это таков:
#views.py
from django.shortcuts import render_to_response
from django.http import Http404
from django.template import Template, Context
from mysite.blog.models import Blog #load a model
from mysite.blog.forms import CommentForm #load a form
def index(request):
try:
blog_posts = Blog.objects.all().order_by('-post_date')[:10]
if request.method == 'POST':
form = CommentForm(request.POST)
else:
form = CommentForm()
except Blog.DoesNotExist:
raise Http404
return render_to_response('blog/posts.html', locals())
Затем мой шаблон (blog/posts.html) выглядит так:
{% extends "base.html" %}
{% block title %}Dummy Django Site{% endblock %}
{% block heading %}A sample header{% endblock %}
{% block content %}
{% if blog_posts %}
{% for post in blog_posts %}
<b>{{post.title}}</b><br/>
<b>{{post.post_date}}</b><br/>
<b>{{post.posted_by}}</b><br/>
{{post.content}}
{% endfor %}
{% endif %}
<h2>A Sample Form</h2>
<form action="" method="POST">
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Send message" /></p>
</form>
{% endblock %}
{% block footer %}
<hr/>
Great footer!
{% endblock %}
В PHP я бы вставил что-то в свой контроллер, например:
//from <form action="http://mysite.com/saveComment" method="POST" >
function saveComment() {
$data['name'] = $_POST['name'];
$data['comment'] = $_POST['comment'];
$model->save($name);
}
Как бы я сделал это в Django?Что, куда бы я поместил код?
Мы будем очень признательны за любой ответ.
Решение
Если вам действительно нужно много нестандартных вещей, ознакомьтесь Формы модели, но Общие представления достаточны для очень многих вариантов использования.
P.S.Если ты действительно делаешь Comment
-сопутствующие материалы, ознакомьтесь с предоставленный Comments
приложение в django.contrib.comments
.
Обновить:Вместо определения ваших представлений и форм, как указано выше, используйте ModelForm
вместо этого.Это позволит использовать код, подобный следующему, для выполнения сохранения:
# Save a new Comment object from the form's data.
>>> new_comment = my_comment_form.save()
Изменение в вашем forms.py
изменило бы определение CommentForm
к чему - то вроде:
from django.forms import ModelForm
class CommentForm(ModelForm):
class Meta:
model = Comment # Assumes you've imported your model somewhere
ОБНОВЛЕНИЕ 2:В целом:
- чтобы сохранить экземпляр модели, просто вызовите
.save()
- для доступа
POST
данные из формы, используйтеcleaned_data
атрибутForm
вы сконструировали изPOST