我很难使用request.POST.get()

时间:2018-11-12 16:45:01

标签: django

我目前正在建立一个非常基本的虚拟社交网站来学习Django,并且我在request.POST.get()上遇到了麻烦,后者没有获取任何东西。这样,我无法在view.py中获得用户输入。这意味着我的网站无法注册任何用户。请帮帮我,因为我所有的进一步学习都取决于获取用户输入。我的编码就像(我知道这是非常基本的,可能看起来很凌乱或有些过时,对此感到抱歉):

models.py:

class User(models.Model):
    first_name= models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    email = models.CharField(max_length=250)
    password = models.CharField(max_length=250)
    gender = models.CharField(max_length=250)
    flag = models.IntegerField(default=0)

views.py:

def register_user(request):
    user = User()
    user.first_name = request.POST.get('firstName')
    user.last_name = request.POST.get('lastName')
    user.email = request.POST.get('email')
    user.password = request.POST.get('password')
    user.gender = request.POST.get('gender')
    user.save()
    return redirect('/login/')

urls.py

from django.conf.urls import url
from . import views

app_name = 'signup'

urlpatterns = [
    url('^$', views.signup, name='signup'),
    url('^login/$', views.register_user, name='register_user'),
]

signup / index.html:

<form action="{% url 'signup:register_user' %}" method="POST">

<div class="name">
    <table class="nameTable">
        <tr class="nameRow">
            <td>
                <p class="nameCSS">First Name</p>
            </td>
            <td>
                <p class="lastName nameCSS">Last Name</p>
            </td>
        </tr>
        <tr class="nameRow">
            <td>
                <input type="text" class="input" name="firstName">
            </td>
            <td>
                <input type="text" class="input lastName" name="lastName">
            </td>
        </tr>

    </table>
</div>

<div>
    <p class="text">Email</p>
</div>
<div>
    <input type="email" class="input largeInput" name="email">
</div>

<div>
    <p class="text">Password</p>
</div>
<div>
    <input type="password" class="input largeInput" name="password">
</div>
<div class="signUpDiv">
    <button class="signUpButton" type="submit">Sign Up</button>
</div>

(在index.html中有很多内容,但是为了简短起见,我只添加了其中的一些代码,是的,我没有使用内置的表单类来创建此表单,但是我已经制作了我自己的模板(此表单编码位于其中)。希望我可以这样做并且问题不存在)

运行此代码时,不会进行数据输入。而如果我使用静态值从Shell运行此方法,则效果很好。预先感谢

1 个答案:

答案 0 :(得分:0)

理想情况下,在这种情况下,您应该使用ModelForm,但是我尝试执行您的代码,并且它做了些微改动。
以下是我认为的更改:

您忘记在模板中放置{%csrf_token%},这将导致在提交表单期间出现禁止的错误

我已经使用csrf_token更新了模板代码。

<form action="{% url 'register_user' %}" method="POST">
{% csrf_token %}

<div class="name">
    <table class="nameTable">
        <tr class="nameRow">
            <td>
                <p class="nameCSS">First Name</p>
            </td>
            <td>
                <p class="lastName nameCSS">Last Name</p>
            </td>
        </tr>
        <tr class="nameRow">
            <td>
                <input type="text" class="input" name="firstName">
            </td>
            <td>
                <input type="text" class="input lastName" name="lastName">
            </td>
        </tr>

    </table>
</div>

<div>
    <p class="text">Email</p>
</div>
<div>
    <input type="email" class="input largeInput" name="email">
</div>

<div>
    <p class="text">Password</p>
</div>
<div>
    <input type="password" class="input largeInput" name="password">
</div>
<div class="signUpDiv">
    <button class="signUpButton" type="submit">Sign Up</button>
</div>

您只能使用一个视图来处理GET和POST请求

仅出于本示例的目的,我已经更新了视图,但是,请确保在保存密码之前先对密码进行加密(使用Django的默认用户模型)并使用

user.set_password('PASSWORD_HERE')

更新了views.py的代码

def register_user(request):
    if request.POST:
        user = User()
        user.first_name = request.POST.get('firstName')
        user.last_name = request.POST.get('lastName')
        user.email = request.POST.get('email')
        user.password = request.POST.get('password')
        user.gender = request.POST.get('gender')
        user.save()
    else:
        return render(request, "YOUR_TEMPLATE_NAME_HERE")    

还请确保您的网址名称正确,即register_user

我希望这会有所帮助:)