级别:绝对入门,尝试构建一个应用来通过Web UI执行一些数据库操作
models.py
from django.db import models
class MysqlUser(models.Model):
username = models.CharField(max_length=100)
password = models.CharField(max_length=50)
environment = models.CharField(max_length=50)
forms.py
from django import forms
from onboard_app.models import MysqlUser
class MysqlUserForm(forms.ModelForm):
CHOICES = (
('test', 'Test'),
('develop', 'Develop'),
('staging', 'Staging'),
)
environment = forms.MultipleChoiceField(choices=CHOICES)
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = MysqlUser
fields = ('username', 'password', 'environment')
views.py
from django.shortcuts import render
from onboard_app.serializers import MysqlUserSerializer
from rest_framework import generics
from onboard_app.forms import MysqlUserForm
from onboard_app.models import MysqlUser
from django.views.generic.edit import CreateView, UpdateView, DeleteView
class MysqlCreateView(CreateView):
model = MysqlUser
form_class = MysqlUserForm
template_name = 'mysqluser_form.html'
success_url = '/mysql/user/add/'
mysqluser_form.html
{% extends "myapp/base.html" %}
{% block title %}MyApp{% endblock %}
{% block content %}
<h1>MySQL User Access</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" class="btn btn-primary" value="Grant Access">
</form>
{% endblock %}
我正在尝试在用户提交表单后获取字段或MultipleChoiceFiled environment
的值,并循环输入的值以执行某些操作。我已经尝试了很久了,仍然不知道怎么做。我不想在前端html中处理任何内容。我认为它必须在“视图”中进行处理,但不确定如何获取字段的值并进行循环。
要研究的任何示例或任何django概念都会对我有很大帮助。感谢您的任何帮助,谢谢!!
答案 0 :(得分:0)
除非您已经这样做,否则建议您在基于类的视图(https://docs.djangoproject.com/en/3.0/topics/class-based-views/intro/)上浏览Django文档,以大致了解整个过程。
因此,提交表单后,将调用视图的post()
方法。 CreateView
提供了一个默认实现,该实现使用您提供的MysqlUserForm
验证用户输入,然后创建MysqlUser
的实例并重定向到success_url
。
如果您想添加更多逻辑,则需要覆盖post()
方法(或其他由post()
调用的方法,特别是form_valid
方法)并将您的逻辑在那里。为了全面了解工作原理,尽管继承看起来有些复杂(确实如此),但我建议您通读CreateView,BaseCreateView,ProcessFormView和ModelFormMixin源代码。更重要的是,我真的建议您使用调试器逐步完成从View.dispatch
方法到form_valid
方法的请求处理过程,并查看其工作原理。相信我,它将为您的发展技能的提高和理解提供真正的帮助。实际上,我已经发现了form_valid
方法,可以通过阅读源代码来编写此答案(如今,我使用rest-framework,并且对Django视图的了解不多)。
所以,您需要的是
class MysqlCreateView(CreateView):
model = MysqlUser
form_class = MysqlUserForm
template_name = 'mysqluser_form.html'
success_url = '/mysql/user/add/'
def form_valid(self, form):
environment = form.cleaned_data['environment']
# insert your code here
return super().form_valid(form)
P.S。像PyCharm这样的优秀IDE,实际上比任何文本编辑器和PDB调试器都更方便阅读源代码,跳转到相关部分并进行 debug 。