新手问题:代码结构,从头开始编写自己的管理员/身份验证/注册,全局函数和变量



我是一名LAMP开发人员,我刚刚开始学习/编写python/django代码...到目前为止,我喜欢它,但我对几个预先构建的应用程序/组件有问题,我喜欢自己从头开始编写它们。

最值得注意的是管理部分和身份验证/注册

我有很多理由,但主要是因为我的母语不是英语,最终用户不会说任何语言.我不喜欢管理员的外观和表示数据的方式,我喜欢在我的大多数表单中使用 Ajax,我需要 Django 不提供开箱即用的管理员中有很多额外的功能,我不喜欢入侵它并且......

因此,考虑到这一点,我将提出我的问题

1- 我应该如何构建我的管理部分?

管理部分基本上与用户部分具有相同的应用程序,但功能不同,因此,

我应该在与用户函数相同的视图中添加这些功能吗? 我可以在一个应用程序中制作 2 个视图吗!或每个应用程序中包含管理员视图的子目录?

或者在根目录中创建一个目录并复制那里的所有应用程序以供管理员使用?(最后的手段是将它们分成 2 个不同的网站,使用相同的应用程序,并将它们放在同一服务器上的 2 个主机中)

基本上 2 个网站(1 个管理员/1 个用户)使用 1 个数据库

2- 身份验证/注册,我想编写自己的代码来处理这些,主要是因为我不希望我的管理员和用户存储在同一个表中(在数据库中),他们也有不同的列,注册时需要存储不同的数据

我已经看到 Django contrib.auth 在行动,它看起来很好而且很容易,但我可以轻松地修改它以让 2 组不同的登录/注册表单使用 2 个不同的表吗?

如果没有,我必须编写自己的代码,所以我有这个子问题(无论如何我都想知道这些问题的答案)

2-1我需要检查用户是否被记录,如果是,则在每个视图上从数据库中读取它,如何使函数在任何视图中的所有其他函数之前运行?

类似的东西

from .models import user
def currentUser(request):
thisUser = user.objects.get(id= request.session.get('user_id') )

我可以在每个 requs 上运行currentUser函数并像全局变量一样thisUser可用于所有其他函数/变量(我想我可以以某种方式将其附加到传递给视图中所有其他函数request)还是我应该切换到使用视图类并通过继承/构造函数解决这个问题

2-2在其他技术(IM LAMP 开发人员)上进行身份验证的基本机制是将记录的用户 ID 存储在会话中,并在每个 httprequest 中检查该会话以查看是否包含用户 ID,如果是这样,他/她将被记录并且从数据库中显示为红色,如果不是,则不会记录用户...Python/Django中有什么不同的东西是我应该知道的,或者在这里是一样的?

2-3如果我创建 2 个不同的应用程序,它们使用相同的表(数据库),例如auth用于注册和登录的应用程序,user用于编辑用户信息和其他东西的应用程序

创建模型的正确/首选方法是什么? 我应该像user应用程序一样在 1 个应用程序中定义它们吗

用户/模型.py

class user(models.Model):
username = models.CharField(max_length=20)
name     = models.CharField(max_length=100)

并将它们包含在身份验证视图中?

身份验证/视图.py

from .models import user
def login():
loggedUser = user.objects.get(username=request.POST['username'])

如果是这样auth应用程序是否需要模型?

有很多 Django 管理插件存在。有些可能会做你需要的一切,或者只需要很小的修改。如果你仍然想从头开始写你自己的,我建议你研究其中的一些以获得想法。查看此页面以获取一个好的列表。

至于你想要完成的具体事情,这些是比"什么是最好的"格式更具体的问题。我建议您尝试实现它,并在遇到麻烦时提出一个新问题。

我会帮助你解决第一个问题,说我从来都不是前端/管理员两个站点的粉丝,甚至 Django 管理员也同意通过名称分隔 url/admin 下的所有内容,这样路由就不会发生冲突。

第二,使用 Django 身份验证并简单地扩展它来做你想做的事情。它之间的联系比你想象的要多得多。同一表中的管理员/用户帐户本质上并不存在风险,分离实际上需要更多的代码,这是引入风险的地方。

在采用框架时,您要做的最后一件事就是立即开始丢弃其中的大部分。尝试让它做你想做的事,然后自定义。我相信您会发现该框架可塑性地满足您的需求。

最新更新