简体   繁体   English

如何在不使用自动模型形式的情况下从Django中的文本框中获取数据?

[英]How to take data from textboxes in Django without using the automated model forms?

I have a very simple thing I want to do, but for some reason I haven't found the solution yet. 我想做一件非常简单的事情,但是由于某种原因,我还没有找到解决方案。 I have a form in HTML 我有一个HTML表单

<form id="user_form" method="POST" action="/ProjectName/home/">

    {% csrf_token %}

    <div class="registerLabel">
        Full name:
    </div>
    <div class="registerTextLabel">
        <input type="text" id="registerFullName" class="registerTextDetails">
    </div>
    <div class="registerLabel">
        Username:
    </div>
    <div class="registerTextLabel">
        <input type="text" id="registerUsername" class="registerTextDetails">
    </div>

    <div id="registerButtonDiv">
        <button class="registerButtons" id="cancelRegisterButton">Cancel</button>
        <button type="submit" class="registerButtons" id="submitRegistration">Register</button>
    </div>
</form>

The thing I want is after filling this form and submitting it to take all the textbox values and put the in my database. 我想要的是填写此表单并将其提交后,以获取所有文本框值并将其放入我的数据库中。

The db model is implemented like this: db模型是这样实现的:

class User(models.Model):
    username = models.CharField(max_length=200)
    password = models.CharField(max_length=200)
    ...
    def __unicode__(self):
        return self.username

Here is the code of the view: 这是视图的代码:

def register(request):
    context = RequestContext(request)
    registed = False
    if request.method == 'POST':
        form = User(data = request.POST)
        username = request.POST.get('registerUsername')
        password = request.POST.get('registerPass')
        user = form.save()
        username = User.username
        password = User.password
        u = User(username,password,...)
        u.save()
        registered = True
        else:
            form = User()

        return render_to_response('ProjectName/home.html', {'user_form':User}, context)

I do not want to use the automated way of Django where it generates forms from models. 我不想使用Django的自动方式,它从模型生成表单。

You forgot to define name in the form. 您忘记在表格中定义名称。 It is important for getting the POST data. 这对于获取POST数据很重要。

<form .........>
   {{error}}<br/><br/>
<div class="registerLabel">Username:</div>
<div class="registerTextLabel">
    <input type="text" id="registerUsername" name="registerUsername" class="registerTextDetails">
</div>

<div class="registerLabel" id="registerLabelPass">Password:</div>
<div class="registerTextLabel">
    <input type="password" id="registerPass" name="registerPass" class="registerTextDetails">
</div>
</form>

def register(request):
    context = RequestContext(request)
    registered = False
    error = ''
    if request.method == 'POST':
        username = request.POST.get('registerUsername')
        password = request.POST.get('registerPass')

        if username and password:
            username_exist = User.objects.filter(username=username)
            if username_exist:
                error = username is already taken, try another
            else:
                User.objects.create(username=username, password=password)
                registered = True
        else:
            error = all fields are required

    return render_to_response('ProjectName/home.html', {'error':error}, context)

Shouldn't this username = User.username password = User.password 此用户名不应该= User.username密码= User.password

be

User.username = username User.password = password User.username =用户名User.password =密码

This is my html file: 这是我的html文件:

{% block content %}
    <div class="container">
        <h6 class="dress"><a href="{% url 'home' %}">Home</a> <i> </i> Register </h6>
    </div>
    <div class="back">
        <h2>PRODUCTS</h2>
    </div>
     <div class="container">
        <div class="register">
        <h3>PERSONAL INFORMATION</h3>
              <form method='POST' action=''>{% csrf_token %}
                    <div class="mation">
                    <div>
                        <span>User Name</span>
                        <input id="id_username" maxlength="150" name="username" type="text" required />
                        <span class="helptext">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</span></p>
                    </div>
                     <div>
                         <span>Email Address</span>
                         <input id="id_email" maxlength="254" name="email" type="text" />
                         </div>
                         <div>
                            <span>Password</span>
                                <input id="id_password1" name="password1" type="password" required />
                    </div>
                             <div>
                            <span>Confirm Password</span>
                                <input id="id_password2" name="password2" type="password" required />
                    </div>
                     </div>
                     <input type="submit" value="Register">
                </form>


           </div>
            </div>
{% endblock %}

Now You can see my RegisterFrom: 现在您可以看到我的RegisterFrom:

class RegistrationForm(forms.ModelForm):
    password1 = forms.CharField(label="Password", widget=forms.PasswordInput())
    password2 = forms.CharField(label="Confirm Password", widget=forms.PasswordInput())

    class Meta:
        model = User
        fields = ['username', 'email']

    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")

        try:
            if ((password1 and password2) and (password1 != password2)):
                raise forms.ValidationError("Password Do not Match")
        except:
            pass
        return password2

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        if commit:
            user.save()
        return user

Like this I am using custom textboxes in Django 像这样我在Django中使用自定义文本框

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM