我目前正在建立一个非常基本的虚拟社交网站来学习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运行此方法,则效果很好。预先感谢
答案 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
我希望这会有所帮助:)