当前位置: 首页 > 后端技术 > Python

Python框架Django实战商城项目用户模块创建

时间:2023-03-26 12:23:53 Python

创建用户APP整个项目中会有多个应用,需要单独存放在一个文件包中,所以新建一个apps目录来管理所有的子应用。在apps包目录下,安装users应用python../../manage.pystartappusers这时候我们需要在django中注册新创建的应用,不过这里我们修改了应用的管理目录,与默认的方法不同。如果还是按照之前的方法注册APP,肯定会报错。这个时候我们可以先查看django的包导入路径,在dev文件中输入print(sys.path())#输出包的所有搜索路径['/Users/xxxx/workspace/xxxx/mall/immortal_mall','/Users/xxxx/workspace/xxxx/mall','/Users/xxxx/workspace/xxxx/mall/venv/lib/python38.zip','/Users/xxxx/workspace/xxxx/mall/venv/lib/python3.8','/Users/xxxx/workspace/xxxx/mall/venv/lib/python3.8/lib-dynload','/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8','/Users/xxxx/workspace/xxxx/mall/venv/lib/python3.8/site-packages','/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend']第一个路径为主目录我们的django项目,也就是说会搜索主目录下的所有package,那么你可以定义APP的路径为meiduo_mall.apps.users,这时候就可以运行程序运行成功了.但是这样定义注册APP的方法太麻烦了。如果有很多应用程序,每个应用程序都必须这样写,这样才不会烦人。所以必须简化。如何简化,直接把apps目录的绝对路径插入到包的搜索路径中,django能搜索到吗?sys.path.insert(0,os.path.join(BASE_DIR,'apps'))是这样完成的,然后注册APPINSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',#'immortal_mall.apps.users','users']返回注册页面准备registration模板,放入预先创建好的templates文件夹中定义用户注册视图类:classRegisterView(View):"""用户注册视图类"""defget(self,request):'''获取registrationpage'''returnrender(request,'register.html')定义用户注册路由#totalrouteurlpatterns=[path('admin/',admin.site.urls),path('',include(('users.urls','users'),namespace='users'))]这里是重点,include函数的第一个参数是一个元组,第一个参数没什么好说的,就是指定路由的子应用,第二个参数是app_name,这里必须指定app_name。如果不指定这个参数,写include('users.urls',namespace='users'),会报错。当然,还有一种方法是在子应用的urls文件中指定app_name='users'。在users应用目录下新建urls.py文件,然后写入路由信息申请,浏览器请求http://127.0.0.1:8989/register/,返回注册页面。用户模型项目使用了django自带的用户认证系统。我们先来了解一下它有哪些功能。Django的默认用户认证系统Django自己的用户认证系统可以处理用户帐户、组、权限和基于cookie的用户会话,位于django.contrib.auth包中。auth包是django内置的一个APP。和admin一样,它可以同时处理认证和授权。身份验证是验证用户是否是系统的成员。授权确定允许经过身份验证的用户执行的操作。Django认证系统提供了一个用户模型类User来存储用户数据,User对象是认证系统的核心:password是必填项,其他字段可选。"""classMeta(AbstractUser.Meta):swappable='AUTH_USER_MODEL'Userl类里面什么都没有,看父类AbstractUser的内容,里面定义了用户的一些字段,包括用户类username,password的一些必填字段,以及其他一些非必填字段,如is_active,is_staff等,用户认证的方法在AbstractUser的父类AbstractBaseUser中,但是UserManager的实例保存在AbstractUser类中的对象称为对象。该类提供了创建User的方法,如:user=User.objects.create_user(username,email,password,**extra_fields)自定义用户模型类这是一个用户注册信息表单,有一个字段为手机号,但是Django提供的usermodel中没有这个字段,需要我们自己定义。classUser(AbstractUser):"""Customusermodelclass"""mobile=models.CharField(max_length=11,unique=True,verbose_name="mobilenumber")classMeta:db_table='tb_user'#自定义表名verbose_name="User"#站点显示verbose_name_plural=verbose_name#复数显示自定义用户模型类需要继承AbstractUser类,然后指定新增的字段。添加后,运行项目,会报错:Thisisthedefaultauthenticationobjectconfigurationofthedjangosystem.我们使用了一个自定义的对象,但是这个对象还没有分配给系统,所以我们需要在我们的dev配置文件中重新分配;AUTH_USER_MODEL='users.User'然后创建一个迁移文件,执行迁移命令,然后完成表的创建。?pythonmanage.pymakemigrationspythonmanage.pymigrate欢迎来到我的博客,更多实测内容!!