如何使用Django的forms.Form将表单输入存入PostgreSQL数据库?
如何用Django的forms.Form获取输入并存入PostgreSQL数据库
嘿,我来帮你搞定这个需求!咱们一步步来,先从最基础的模型创建开始——毕竟要往数据库存数据,得先有对应的模型映射表~
1. 创建Django模型(models.py)
首先你需要在app的models.py里定义一个模型,字段和你的表单一一对应,用来映射PostgreSQL里的表:
from django.db import models class Submission(models.Model): website = models.URLField() email = models.EmailField() created_at = models.DateTimeField(auto_now_add=True) # 可选:自动记录提交时间 def __str__(self): return self.email # 后台管理里显示邮箱,方便识别
写完模型后,别忘执行迁移命令,让Django帮你在PostgreSQL里创建对应表:
python manage.py makemigrations python manage.py migrate
2. 完善views.py里的表单处理逻辑
你的views.py里simple_form函数还没写完,咱们把它补全,处理GET和POST两种请求场景:
from django.shortcuts import render, redirect from .forms import SimpleForm from .models import Submission # 引入刚才创建的模型 def simple_form(request): if request.method == 'POST': # 提交表单时,用POST数据初始化表单 form = SimpleForm(request.POST) if form.is_valid(): # 表单验证通过,获取清理后的安全数据 website = form.cleaned_data['website'] email = form.cleaned_data['email'] # 创建模型实例并保存到PostgreSQL Submission.objects.create(website=website, email=email) # 保存成功后重定向到成功页面(也可以返回当前页面,看你需求) return redirect('success_page') # 记得先在urls.py配置这个路由 else: # GET请求时,展示空表单 form = SimpleForm() return render(request, 'simple_form.html', {'form': form}) # 可选:添加一个提交成功的提示页面视图 def success_page(request): return render(request, 'success.html')
3. 创建表单模板(templates/simple_form.html)
接下来需要一个模板渲染表单,让用户能输入内容:
<form method="post"> {% csrf_token %} {{ form.as_p }} <!-- 用p标签渲染表单字段,也可以用form.as_table自定义布局 --> <button type="submit">提交</button> </form> <!-- 显示表单验证错误信息 --> {% if form.errors %} <div class="error-messages"> {% for field in form %} {% for error in field.errors %} <p>{{ field.label }}: {{ error }}</p> {% endfor %} {% endfor %} {% for error in form.non_field_errors %} <p>{{ error }}</p> {% endfor %} </div> {% endif %}
再创建一个success.html用来提示用户提交成功:
<h1>提交成功!</h1> <p>你的信息已经成功存入数据库啦~</p> <a href="{% url 'simple_form' %}">返回表单</a>
4. 配置PostgreSQL数据库(settings.py)
确保你的Django项目已经配置好PostgreSQL连接,在settings.py的DATABASES部分修改成:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名称', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': 'localhost', # 数据库在本地就填这个,远程的话填对应IP 'PORT': '5432', # PostgreSQL默认端口 } }
如果还没装PostgreSQL的Python驱动,先在终端安装:
pip install psycopg2-binary
最后配置路由(urls.py)
别忘了在app的urls.py里添加对应路由:
from django.urls import path from . import views urlpatterns = [ path('form/', views.simple_form, name='simple_form'), path('success/', views.success_page, name='success_page'), ]
这样一套流程下来,用户提交表单后,数据会先经过Django表单验证,验证通过就会存入PostgreSQL数据库啦!如果需要调整字段或者逻辑,直接对应修改就行~
内容的提问来源于stack exchange,提问作者user9558965
相关产品推荐
相关产品推荐

