django DefaultRouter(trailing_slash=False)
时间: 2023-11-22 19:54:54 浏览: 36
在 Django 中,`DefaultRouter` 是一个路由器类,用于为视图集生成默认的 URL 前缀和操作方法路由。它允许您轻松地为视图集创建标准的 RESTful API 路由。
`trailing_slash=False` 是一个可选参数,它指示路由器在生成 URL 时是否添加尾部斜杠。如果设置为 `False`,则生成的 URL 将不会包含尾部斜杠。
例如,如果您有一个名为 `MyViewSet` 的视图集,并且使用以下代码创建路由:
```
from rest_framework.routers import DefaultRouter
router = DefaultRouter(trailing_slash=False)
router.register(r'my_viewset', MyViewSet)
urlpatterns = router.urls
```
则生成的 URL 将如下所示:
```
/my_viewset
/my_viewset/{pk}
/my_viewset/{pk}/action
```
注意,这些 URL 没有尾部斜杠。如果 `trailing_slash` 参数设置为 `True`(默认值),则会在 URL 末尾添加尾部斜杠。
相关问题
RuntimeError: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8000/apple/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.
这个错误是由于在Django中使用了APPEND_SLASH=True,但是你的URL在结尾处没有斜线,所以Django会尝试重定向到带斜线的URL,但是重定向会导致POST数据丢失,所以报错了。解决这个问题有两种方法:
1. 在你的form表单中将action的地址改为带斜线的URL,即127.0.0.1:8000/apple/。
2. 在Django的settings.py文件中将APPEND_SLASH设置为False,这样Django就不会自动重定向URL了,而是直接返回404错误。
class Users(models.Model): user = models.CharField(max_length=11, primary_key=True) password = models.CharField(max_length=128) nick = models.CharField(max_length=16, blank=True) tel = models.CharField(max_length=11, blank=True) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): self.password = make_password(self.password) super().save() def __str__(self): return self.user class Meta: db_table = 'users'
这段代码是一个 Django 模型类,表示一个名为 Users 的数据库表,包含了 user、password、nick 和 tel 四个字段。其中 user 字段是主键字段,长度为 11,password 字段长度为 128,nick 和 tel 字段长度为 16 和 11,允许为空。当保存一个 Users 实例时,会将密码加密后再保存。Meta 类中指定了表名为 'users'。