菜鸟问题:代码结构,从头开始编写自己的admin / auth / registration,全局函数和变量

时间:2016-05-20 23:59:25

标签: python django

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

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

我有很多理由,但主要是因为我的母语不是英语而且END USER不会说任何话。我不喜欢管理员看起来和表示数据的方式,我喜欢使用ajax在我的表格中,我需要在管理员中提供许多额外的功能,而django并不提供开箱即用的功能,而且我不喜欢入侵它... ...

所以考虑到这一点,我会问我的问题

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

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

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

或在root中创建一个目录并将所有应用程序复制到admin? (最后的手段将它们拆分为2个不同的网站,使用相同的应用程序,并将它们放在同一台服务器上的2个主机中)

使用1个数据库

基本上有2个网站(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') )

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

2-2 其他技术(即LAMP开发人员)身份验证的基本机制是将记录的用户ID存储在会话中,并在每个httprequest中检查该会话看看是否包含用户ID,如果他/她被记录并且将从数据库中变红并且如果没有用户未被记录... python / django中有什么不同我应该知道或者它在这里是相同的?

2-3 如果我创建2个不同的应用程序,使用相同的表(数据库),例如auth app进行注册和登录,{{ 1}} app用于编辑用户信息和其他内容

创建模型的正确/首选方式是什么?我应该在一个应用程序中定义它们,如user app

用户/ models.py

user

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

AUTH / views.py

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

如果是from .models import user def login(): loggedUser = user.objects.get(username=request.POST['username']) 应用程序需要一个模型吗?

1 个答案:

答案 0 :(得分:1)

存在很多Django管理插件。有些人可能会做你需要的一切或只需要稍作修改。如果您仍想从头开始编写自己的内容,我建议您研究其中的一些以获取想法。查看this page以获取一个好的列表。

至于你想要完成的具体事情,那些是比“最好的”格式更具体的问题。我建议你尝试实施它,并在遇到麻烦时打开一个新问题。

我会用第一个问题来帮助你说我从来没有成为前端/管理员的两个网站的粉丝,甚至Django管理员同意通过名称间隔url / admin下的所有内容,所以路由不会发生冲突。

还有第二个,使用Django auth并简单地扩展它以做你想要的。它比你想象的要多得多。同一个表中的管理员/用户帐户本身并不存在风险,分离实际上需要更多代码,这是引入风险的地方。

采用框架时,您最不想做的就是立即开始扔掉它的大部分内容。尝试让它做你想要的,然后自定义。我相信你会发现这个框架可以满足你的需求。