Django 开发异常记录

文章列举了Django开发中遇到的一些典型问题,如TemplateDoesNotExist、CSRF验证失败、URLnamespace警告、注册页面实现、数据表创建错误、模型字段更新等,并详细说明了每个问题的原因及相应的解决策略,帮助开发者排查和修复Django应用中的故障。
摘要由CSDN通过智能技术生成

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 中新增字段

  1. models.py 中新增字段 email = models.EmailField()
  2. 命令行执行命令 python manage.py makemigrations app名字
  3. 执行步骤 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
  1. 执行 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风老魔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值