【问题标题】:django: taking user input from html, processing it and showing output in the same pagedjango:从 html 获取用户输入,对其进行处理并在同一页面中显示输出
【发布时间】:2021-05-07 14:02:46
【问题描述】:

我是 Django 的新手,并且停留在特定的点上。我想从进入数据库的 html 中获取用户输入,使用特定的 python 脚本对其进行处理并将结果返回到同一个 html 页面。

我希望用户在“exam_score”行中输入分数,然后使用特定的 python 脚本处理该输入,然后将结果输出到“uni_name_1_result”。目前,只打印 'Hello world' 的 python 脚本就足够了,只是想了解它是如何完成的。

不胜感激。

models.py

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator

# Create your models here.
class User(models.Model):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    email = models.EmailField(max_length=254,unique=True)
    exam_score = models.FloatField(null=True, validators=[MinValueValidator(0.0),MaxValueValidator(700)])
    uni_name_1 = models.CharField(max_length=254)
    uni_name_1_result = models.CharField(max_length=254)

forms.py

  from django import forms
    from django.core import validators
    from ielts_app.models import User
    
    class NewUserForm(forms.ModelForm):
        # validations can be set here
    
        class Meta():
            model = User
            fields = '__all__'

views.py

from django.shortcuts import render
# from ielts_app import forms
from ielts_app.forms import NewUserForm
# from django.http import HttpResponseRedirect

def index(request):
    return render(request,'ielts_app/index.html')

def users(request):
    form = NewUserForm()
    if request.method == 'POST':
        form = NewUserForm(request.POST)
        if form.is_valid():
            variable:form.cleaned_data
            form.save(commit=True)   # to save forum data (user data), commit=True to database
            # return HttpResponseRedirect('/THANKS/')
            return index(request)  # return back to homeage after getting user data
        else:
            print("ERROR!")
    return render(request,'ielts_app/users.html',{'form':form})

users.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Users</title>
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  </head>
  <body>
    <h1>Please Sign Up:</h1>
    <div class="container">
      <form method="POST">
        {{ form.as_p }}
        {% csrf_token %}
        <input type="submit" class='btn btn-primary' value="Submit">
      </form>

    </div>

  </body>
</html>

【问题讨论】:

    标签: django django-models django-views django-forms django-database


    【解决方案1】:

    您可以按照以下方式进行。

    from django import forms
        from django.core import validators
        from ielts_app.models import User
        
        class NewUserForm(forms.ModelForm):
            # validations can be set here
        
            class Meta():
                model = User
                fields = ('exam_score',)
    

    并在你的 user.html 中执行此操作。

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Users</title>
        <!-- Latest compiled and minified CSS -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
     
    
         </head>
          <body>
            <h1>Please Sign Up:</h1>
            <div class="container">
              <form method="POST">
                {% for field in form %}
                {{ form.as_p }}
                 {{ field }}
                {% endfor %}
                {% csrf_token %}
                <input type="submit" class='btn btn-primary' value="Submit">
              </form>
        
            </div>
        
          </body>
        </html>
    

    最好将模型重命名为其他模型名称,因为它可能与 django 给出的用户模型冲突。

    【讨论】:

    • 嗨,感谢 cmets。它给了我错误:django.db.utils.IntegrityError:唯一约束失败:tqdk_app_unisurvey.email。我仍然不确定如何从“exam_score”获取用户输入,在后端使用另一个 python 脚本处理它,然后将结果返回到相同的 html。
    猜你喜欢
    • 2013-01-28
    • 2020-08-12
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2019-05-20
    • 2013-06-04
    相关资源
    最近更新 更多