1. TemplateDoesNotExist at /login/
原因:没有将 templates 文件夹路径添加到 settings.py 中,视图(app\views.py)找不到
解决办法:打开 settings.py,找到 TEMPLATES,添加:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
2. Django提交表单时遇到403错误:CSRF verification failed
原因:有一个真正的跨站请求伪造,或当Django的CSRF的机制还没有正确使用
解决办法:在表单中添加 {% csrf_token %},并在视图(views.py)函数上面添加 @csrf_exempt:
<form action="{% url 'reg' %}" method="post">
{% csrf_token %} # 添加这句
<p>用户名 <input type="text" name="user"></p>
<p>密码 <input type="text" name="pwd"></p>
<p>爱好
<input type="checkbox" name="hobby" value="basketball">篮球
<input type="checkbox" name="hobby" value="football">足球
<input type="checkbox" name="hobby" value="tv">电视
</p>
<p><input type="submit"> 提交</p>
</form>
@csrf_exempt
def register():
pass
3. 创建数据表时出现:
WARNINGS: ?: (urls.W005) URL namespace ‘admin’ isn’t unique. You may not be able to reverse all URLs in this namespace App ‘first_orm’ could not be found. Is it in INSTALLED_APPS? 错误
原因:app 没有添加到 INSTALLED_APPS
解决办法:将 app 添加到 INSTALLED_APPS 中,再执行:
python3 manage.py makemigrations --empty managerbook # managerbook就是你的app名字,此处要写成自己的app名字
python3 manage.py makemigrations # 再次正常运行生成迁移文件的命令
python3 manage.py migrate # 同步数据库
3. 注册页面
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="{% url 'reg' %}" method="post">
{% csrf_token %}
<p>用户名 <input type="text" name="user"></p>
<p>密码 <input type="text" name="pwd"></p>
<p>爱好
<input type="checkbox" name="hobby" value="basketball">篮球
<input type="checkbox" name="hobby" value="football">足球
<input type="checkbox" name="hobby" value="tv">电视
</p>
<p><input type="submit"> 提交</p>
</form>
</body>
</html>
blog\views.py
path('register/', views.register, name='reg')
def register(request):
"""
注册页面
:param request: 请求信息
:return:
"""
print('----------------------')
if request.method == 'POST': # 当是 post 请求时
print(request.POST) # <QueryDict: {'user': ['jun'], 'pwd': ['123'], 'hobby': ['basketball', 'tv']}>
print(request.POST.get('user'))
print(request.POST.get('pwd'))
print(type(request.POST.get('user')))
return HttpResponse('Successful!')
return render(request, 'register.html') # 当是 get 请求时,返回页面,即直接输入 url
4. URL name
# app\urls.py
path('index/', views.add, name='a'),
name 可以用于在 templates, models, views ……中得到对应的网址,相当于“给网址取了个名字”,只要这个名字不变,网址变了也能通过名字获取到
5. Django错误RuntimeError at /app/edit_user/7运行时错误
问题分析:form 表单的 action 提交少了一个斜杆 /
<form action="/app/edit_user/{{ nid }}" method="post"> # 错误
<form action="/app/edit_user/{{ nid }}/" method="post"> # 正确
6. django在models.py新增表字段出现You are trying to add a non-nullable field ‘message’ to usermessage without a
6.1 方法一
将 migrations
文件夹中的文件,除 __init__
外全删除,再执行数据迁徙,同步。
6.2 方法二
在新添加的表字段中,添加默认值或指定 null=True
,再执行数据迁徙,同步。
message = models.CharField(max_length=500, default='abc')
7. Django 中新增字段
- models.py 中新增字段
email = models.EmailField()
- 命令行执行命令
python manage.py makemigrations app
名字 - 执行步骤 2 后,出现:
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option
在这里要给新增字段设置默认值,选择 1 即可,再设置默认值,随意输入一个默认值,如 :''
- CharField、TextField 可以设置
blank = True
,表示django后台管理输入这个字段可以为空,False 时字段必须填写 null=True
时,Django 用 null 来存储空值。日期、时间、数字类型字段不接受空值,所以可以为空时,需要设置blank/null 均为 True
。如果想设置BooleanField
为空时选NullBooleanField
- 执行
python manage.py migrate
8. OverflowError:django signed integer is greater than maximum
原因:DateFiled(auto_now_add=True)
,当输入日期格式时,会变成时间戳(一长串数字)
解决办法:去掉 auto_now_add=True
,再重新执行 python manage.py makemigrations app名字
、python manage.py migrate
。
9. AssertionError: Expected a Response
, HttpResponse
or HttpStreamingResponse
to be returned from
原因:在请求处理后,有没有return Response