- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Django 编写一个简单的银行应用程序,但我遇到了一个奇怪的错误,缺少位置参数。任何帮助将非常感激。其他模板和 View 工作正常。当我转到登录页面时出现问题。
完整的错误是:
TypeError at /banking/login/
login() missing 1 required positional argument: 'person_id'
Request Method: GET
Request URL: http://127.0.0.1:8000/banking/login/
Django Version: 1.9
Exception Type: TypeError
Exception Value:
login() missing 1 required positional argument: 'person_id'
Exception Location: /home/soupdragon/DJapps/env/lib/python3.4/site-
packages/django/core/handlers/base.py in get_response, line 147
Python Executable: /home/soupdragon/DJapps/env/bin/python
Python Version: 3.4.3
Python Path:
'/home/soupdragon/DJapps/banking/mybank',
'/home/soupdragon/DJapps/env/lib/python3.4',
'/home/soupdragon/DJapps/env/lib/python3.4/plat-i386-linux-gnu',
'/home/soupdragon/DJapps/env/lib/python3.4/lib-dynload',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-i386-linux-gnu',
'/home/soupdragon/DJapps/env/lib/python3.4/site-packages']
Server time: Fri, 12 Aug 2016 17:39:38 +0000
堆栈跟踪是:
Internal Server Error: /banking/login/
Traceback (most recent call last):
File "/home/soupdragon/DJapps/env/lib/python3.4/site-packages/django
/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/soupdragon/DJapps/env/lib/python3.4/site-packages/django
/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: login() missing 1 required positional argument: 'person_id'
[12/Aug/2016 17:39:38] "GET /banking/login/ HTTP/1.1" 500 6010
网址文件:
from django.conf.urls import url
from . import views
app_name = 'banking'
urlpatterns = [
# ex: /banking/deposit
url(r'^deposit/$', views.deposit, name='deposit'),
# ex: /banking/
url(r'^$', views.hello, name='hello'),
# ex: /banking/login
url(r'^login/$', views.login, name='login'),
# ex: /banking/transfer
url(r'^transfer/$', views.transfer, name='transfer'),
# ex: /banking/withdraw
url(r'^withdraw/$', views.withdraw, name='withdraw'),
# ex: /banking/welcome
url(r'^welcome/$', views.welcome, name='welcome'),
]
模型文件是:
from django.db import models
# Create your models here.
class Person(models.Model):
first_name = models.CharField(max_length=4,default="Bob")
last_name = models.CharField(max_length=6,default="Smith")
login_name = models.CharField(max_length=3,default="me")
password = models.CharField(max_length=7, default="password")
person_text = models.CharField(max_length=10, default="Bob Smith")
def get_first_name(self):
return self.first_name
def get_last_name(self):
return self.last_name
def get_login_name(self):
return self.login_name
def get_password(self):
return self.password
def __str__(self):
return self.person_text
class Account1(models.Model):
account_number = models.IntegerField(default=12345678)
bank_balance = models.DecimalField(max_digits=4,
decimal_places=2,default=12.99)
interest_rate = models.IntegerField(default=2)
account_name = models.CharField(max_length=16, default="Current
Account")
person = models.ForeignKey(Person, on_delete=models.CASCADE,default="")
def get_account_number(self):
return self.account_number
def get_bank_balance(self):
return self.bank_balance
def deposit(self, amount):
self.bank_balance = self.bank_balance + amount
return
def get_interest_rate(self):
return self.interest_rate
def withdraw(self, amount):
self.bank_balance = self.bank_balance - amount
return
#def __str__(self):
# return self.account_name
View 文件是:
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.template import loader
from .models import Person, Account1
# Create your views here.
def deposit(request):
person = Person
account1 = Account1
context = {'account1':account1,'person':person}
template = loader.get_template('banking/deposit.html')
return HttpResponse(template.render(context,request))
def hello(request):
return HttpResponse("Hello.")
def login(request, person_id):
person = get_object_or_404(Person, pk=person_id)
try:
selected_login = person.choice_set.get(pk=request.POST['login'])
selected_password = person.choice_set.get(pk=request.POST['password'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, 'banking/login.html', {
'person': person,
'error_message': "You didn't select a choice.",
})
else:
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
return HttpResponseRedirect(reverse('banking:welcome',
args=(question.id,)))
def transfer(request):
person = Person
account1 = Account1
context = {'account1':account1,'person':person}
template = loader.get_template('banking/transfer.html')
return HttpResponse(template.render(context,request))
def welcome(request):
person = Person
account1 = Account1
context = {'account1':account1,'person':person}
template = loader.get_template('banking/welcome.html')
return HttpResponse(template.render(context,request))
def withdraw(request):
person = Person
account1 = Account1
context = {'account1':account1,'person':person}
template = loader.get_template('banking/withdraw.html')
return HttpResponse(template.render(context,request))
登录模板是:
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<title>Deposit Money</title>
<h1 id="bluetext">Please Select Account to Deposit into</h1>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{% static 'css/deposit.css' %}">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap
/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery
/1.11/jquery.min.js"></script>
<style type="text/css"></style>
</head>
<body>
<div class="container-fluid" style="background-image:
url('login.jpg'); width: 100%; height: 300px; background-size:cover;">
</div>
<form action="{% url 'banking:login' person.id %}" method="post">
<fieldset>
{% csrf_token %}
<legend>Your details:</legend>
<hr></hr>
Username:<input type="text" id="username" name="username" size="33
</input>
<br></br>
Password:<input type="text" id="password" name="password" size="33">
</input>
<input type="submit" name="submit" value="Submit"></input>
</fieldset>
</form>
</body>
</html>
最佳答案
问题出在这里:
def login(request, person_id):
person = get_object_or_404(Person, pk=person_id)
您的 View 期望从 url 传递 person_id
,但您的 url 模式不包含 person_id
。
请不要重新发明轮子 - 使用内置的身份验证系统。如果必须,您应该尝试从 request.POST
中检索 username
和 password
并使用用户名找到正确的用户(person ).无论如何,使用 person_id 可能不是最好的解决方案。
关于Django TypeError 缺少 1 个必需的位置参数 : 'person_id' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934042/
这是今晚尝试让 JPA/Hibernate 在新项目中工作的第 43 个障碍。 当尝试创建并保留我的 Staffer 类时,我得到: SEVERE: Column 'Person_ID' cannot
在我的 Rails 应用程序中,我有这个模型: class Project :people_projects end 我不明白的是: 当我创建一个新项目时,为什么我的 person_ids 数组的开
我正在尝试使用 Django 编写一个简单的银行应用程序,但我遇到了一个奇怪的错误,缺少位置参数。任何帮助将非常感激。其他模板和 View 工作正常。当我转到登录页面时出现问题。 完整的错误是: Ty
我是 mysql 新手,正在使用在线服务器(MYSQL 版本 5.1.69),我有下表 CREATE TABLE `person_info` ( `id` int(11) NOT NULL AUT
有人可以将这个英语转换成 SQL 我已经尝试了几种方法但没有成功。 SELECT CASE WHEN COUNT(person_id) > 3 THEN person_id end FROM tabl
所以我发现mysql不支持使用像count(distinct(person_id))这样的聚合函数和窗口函数。例如,下面的查询将不起作用。 select count(distinct(person_i
我是 hibernate 新手,学习 doc 保存持久对象 已关注 hibernate doc这是人和电话的一对多关系 @Entity @Table(name = "phone") public cl
我知道这在 Django 圈子里似乎是一个被问得太多的问题,但我不敢说我还没有找到解决这个问题的方法。 我的模型 - from djago.... import User class InfoPe
我想创建一个列来标记员工,只要他们得到晋升(等级变化),如下例所示: +-----------+------------+------------+-------+------+ | PERSON_I
我有这样的数据: +----------+-----------+------------+------+ | group_id | person_id | is_primary | year | +
我是一名优秀的程序员,十分优秀!