最近在学习使用Django自带的forms窗体显示数据,避免了在网页中一个个敲标签,显示数据方便了许多。
首先是models
from django.db import models
# Create your models here.
class Post(models.Model):
mood = models.ForeignKey('Mood',on_delete=models.CASCADE)
nickname = models.CharField(max_length=10, default='佚名')
message = models.TextField(null=False)
del_pass = models.CharField(max_length=10)
pub_time = models.DateTimeField(auto_now=True)
enabled = models.BooleanField(default=False)
def __str__(self):
return self.message
在APP文件中创建一个forms.py文件,与views同级
下面是forms.py
from django import forms
from myform import models #myform 是我创建APP的名字
class PostForm(forms.ModelForm):
class Meta:
model = models.Post
fields = ['mood', 'nickname', 'message', 'del_pass']
def __init__(self, *args, **kwargs):
super(PostForm, self).__init__(*args, **kwargs)
self.fields['mood'].label = '现在的心情'
self.fields['nickname'].label = '昵称'
self.fields['message'].label = '心情留言'
self.fields['del_pass'].label = '设置密码'
#这个函数是为了使fields在显示的时候是相应的中文
下面是views函数内容
from django.template import RequestContext
from django.template.loader import get_template
from django.http import HttpResponse
import os
from myform import models, forms
from django.template import Template
# Create your views here.
def post(request):
if request.method == 'POST':
post_form = forms.PostForm(request.POST)
if post_form.is_valid():
message = '您的信息以及存储,需要管理员同意后才可以看到'
post_form.save()
else:
message = '请检查你填写的内容'
else:
post_form = forms.PostForm()
message = '如果要张贴信息,那么每一个信息都要填写'
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
with open(os.path.join(BASE_DIR, 'templates\post.html'), encoding='utf-8') as fr:
template_string = fr.read()
# 不能用loader.get_template方法,必须用原生的read方法
tem = Template(template_string)
request_context = RequestContext(request)
request_context.push(locals())
return HttpResponse(tem.render(request_context))
由于使用了csrf验证,所以用了RequestContext
下面是网页内容
{% extends 'base.html' %}
{% block title %}
我有话说
{% endblock %}
{% block content %}
<div class="container">
{% if message %}
<div class="alert alert-warning">{{ message }}</div>
{% endif %}
<form action="." method="POST">
{% csrf_token %}
<table>
{{ post_form.as_table }}
</table>
<input type="submit" value="张贴">
<input type="reset" value="清除重填">
</form>
</div>
{% endblock %}