Python笔记:Django框架的应用的管理、项目的模型、网站Admin管理

发布时间:2026/9/7 11:10:53
Python笔记:Django框架的应用的管理、项目的模型、网站Admin管理 进入我们的项目Django-1.11.11假设在创建之初, 我们通过此命令来创建: $django-admin startproject DjangoApp后期将最外层目录修改为了:Django-1.11.11根据我们使用的Django版本的文档运行开发服务器$python3 manage.py runserver这样只能本机调试访问$python3 manage.py runserver 8080该runserver命令在端口8000的内部IP上启动开发服务器。当然也可以指定端口开启服务,如8080端口$python3 manage.py runserver 0:8000这样启动通过0可以进行远程访问, 并且在settigns.py中ALLOWED_HOSTS添加自己的ip地址, 或支持所有 ALLOWED_HOSTS [‘*’]runserver只能在本机使用, 是Django自带的http服务部署时应使用uwsgi应用的创建1 )创建一个应用程序Django自带一个实用程序可以自动生成应用程序的基本目录结构因此您可以专注于编写代码而不是创建目录。要创建您的应用程序请确保您与目录位于同一目录manage.py 并键入以下命令$python3 manage.py startapp app这将创建一个目录app其目录如下Django-1.11.11/ ├── manage.py ├── DjangoApp │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── app ├── admin.py ├── apps.py ├── __init__.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py2 编写我们的第一个视图我们来写第一个视图。打开文件app/views.py 并放入以下Python代码fromdjango.httpimportHttpResponsedefindex(request):returnHttpResponse(Hello World!)这是Django中最简单的视图。要调用视图我们需要将其映射到一个URL - 为此我们需要一个URLconf。要在app目录中创建一个URLconf创建一个名为urls.py。您的应用目录应该如下所示└── app ├── admin.py ├── apps.py ├── __init__.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py在app/urls.py文件中包含以下代码fromdjango.conf.urlsimporturlfrom.importviews urlpatterns[url(r^$,views.index,nameindex),]下一步是将根URLconf指向app.urls模块, 在DjangoApp/urls.py添加一条import用于django.conf.urls.include和插入include()的urlpatterns列表fromdjango.conf.urlsimportinclude,urlfromdjango.contribimportadmin urlpatterns[url(r^admin/,admin.site.urls),url(r^app/,include(app.urls)),]其中include()函数允许引用其他URLconfs。请注意该include()函数的正则表达式 没有$字符串匹配字符而是尾部的斜杠。每当Django遇到时 include()它会排除与该点匹配的任何部分并将剩余的字符串发送到随附的URLconf进行进一步处理。背后的想法include()是使即插即用的URL变得容易。注include()当您包含其他网址格式时您应始终使用。admin.site.urls是唯一的例外。验证index视图连接到URLconf中 运行以下命令$python manage.py runserver 0:8000访问http://0.0.0.0:8000/app/ 可见Hello World!输出3 关于url()函数的补充Django url() 可以接收四个参数分别是两个必选参数regex、view 和两个可选参数kwargs、name接下来详细介绍这四个参数。regex: 正则表达式与之匹配的 URL 会执行对应的第二个参数 viewview: 用于执行与正则表达式匹配的 URL 请求kwargs: 视图使用的字典类型的参数name: 用来反向获取 URL项目模型1 连接MySQL数据库设置默认情况下配置使用SQLite。若不使用SQLite作为数据库则需要额外的设置例如 USERPASSWORD和HOST必须加入。其中ENGINE设置为数据库后端使用。内置数据库后端有django.db.backends.postgresql django.db.backends.mysql django.db.backends.sqlite3 django.db.backends.oracle在DjangoApp/settings.py文件中通过DATABASES项进行数据库设置DATABASES{default:{ENGINE:django.db.backends.mysql,NAME:mydemo,USER:root,PASSWORD:,# 填入自己的密码HOST:localhost,PORT:3306,}}注意Django使用MySQL数据库需要安装PyMySQL, $pip3 install pymysql打开 DjangoApp/init.py写入以下代码导入pymysqlimportpymysql pymysql.install_as_MySQLdb()2 )创建模型在我们的简单的应用程序中去创建一个stu表信息操作的Model类编辑app/models.py文件fromdjango.dbimportmodels# Create your models here.classStu(models.Model):自定义Stu表对应的Model类#定义属性默认主键自增id字段可不写idmodels.AutoField(primary_keyTrue)namemodels.CharField(max_length16)agemodels.SmallIntegerField()sexmodels.CharField(max_length1)classidmodels.CharField(max_length8)# 定义默认输出格式def__str__(self):return%s:%s:%s:%s:%s%(self.id,self.name,self.age,self.sex,self.classid)# 自定义对应的表名默认表名app_stuclassMeta:db_tablestu3 )激活模型要将该应用程序包括在我们的项目中我们需要在设置中添加对其配置类的引用INSTALLED_APPS该appConfig是在app/apps.py文件中所以它的访问路径’app.apps.AppConfig’编辑DjangoApp/settings.py文件并将该虚线路径添加到该INSTALLED_APPS设置INSTALLED_APPS[django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,app.apps.AppConfig,# 这里或者直接写 app]4 )交互式的Python shell使用Django提供的免费API$ python3 manage.py shell Python3.6.7(v3.6.7:6ec5cf24b7, Oct202018, 03:02:14)[GCC4.2.1 Compatible Apple LLVM6.0(clang-600.0.57)]on darwin Typehelp,copyright,creditsorlicenseformoreinformation.(InteractiveConsole)from app.modelsimportStumodStu.objectslistsmod.all()forvinlists:... print(v)...1:zhangsan:10:m:p012:lisi:12:m:p023:lily:9:w:p03mod.get(id1)Stu:1:zhangsan:10:m:p01mod.get(id2)Stu:2:lisi:12:m:p02mod.get(id3)Stu:3:lily:9:w:p03quit()5 )在app应用的视图中使用文件app/views.py 文件代码fromdjango.shortcutsimportrenderfromdjango.httpimportHttpResponsefromapp.modelsimportStu# Create your views here.defindex(request):returnHttpResponse(Hello Django!)defstu(request):#获取所有stu表信息listsStu.objects.all()print(lists)#获取单条学生信息print(Stu.objects.get(id1))returnHttpResponse(ok)配置stu函数的访问路由, 在app/urls.py文件中配置url(r^stu$,views.stu),启动服务后在浏览器中访问,在命令行终端中查看输出效果: http://0.0.0.0:8000/app/stu启用网站Admin管理1 )数据迁移Django框架中有一个非常强大的应用功能–自动管理界面常被Web平台管理者使用去管理整个Web平台。默认情况下在settings.py配置文件中INSTALLED_APPS包含以下应用程序这些应用程序都是由Django提供django.contrib.admin - 管理网站。你会很快使用它。django.contrib.auth - 认证系统。django.contrib.contenttypes - 内容类型的框架。django.contrib.sessions - 会话框架。django.contrib.messages - 消息框架。django.contrib.staticfiles - 管理静态文件的框架。为了后续的开发默认这些应用程序都是包含在里面的。使用这些Django自带的应用程序需要我们在数据库中创建一些数据表对应然后才能使用它们。为此请运行以下命令数据结构迁移$python3 manage.py migrate其中该migrate命令查看该INSTALLED_APPS设置并根据DjangoApp/settings.py文件中的数据库设置和应用程序随附的数据库迁移创建任何必需的数据库表稍后将介绍。您会看到适用于每个迁移的消息。$ python3 manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying sessions.0001_initial... OK默认情况下自动在我们的数据库中创建了10张表具体如下mysqlshow tables;----------------------------|Tables_in_mydb|----------------------------|auth_group||auth_group_permissions||auth_permission||auth_user||auth_user_groups||auth_user_user_permissions||django_admin_log||django_content_type||django_migrations||django_session||stu|----------------------------11rowsinset(0.00sec)2 )创建管理员用户首先我们需要创建一个可以登录管理站点的用户。运行以下命令假设我们设置的密码是123456_admin$ python3 manage.py createsuperuser Username(leave blank to userwx-robot): Email address: rwx-robotgmail.com Password: Password(again): Superuser created successfully.3 )启动开发服务器默认情况下Django管理员站点被激活。让我们开始开发服务器并探索它。启动开发服务器命令如下 $python3 manage.py runserver 0.0.0.0:8000现在打开一个Web浏览器访问地址 http://0.0.0.0:8000/admin/ 输入我们的用户名/密码即可登录4 )设置时区和语言编辑DjangoApp/settings.py配置文件LANGUAGE_CODEzh-hansTIME_ZONEAsia/Shanghai5 )将我们自定义的应用程序的加入到后台管理但我们的自定义应用程序在哪里并没有显示在后台管理索引页面上。要做到这一点打开app/admin.py 文件并编辑代码如下fromdjango.contribimportadminfromapp.modelsimportStu admin.site.register(Stu)6 )更深入设计后台管理编辑app/models.py文件在Stu类中添加如下信息让后台管理显示中文字段classStu(models.Model):自定义Stu表对应的Model类#定义属性默认主键自增id字段可不写idmodels.AutoField(学号,primary_keyTrue)namemodels.CharField(姓名,max_length16)agemodels.SmallIntegerField(年龄)sexmodels.CharField(性别,max_length1)classidmodels.CharField(班级,max_length8)# 定义默认输出格式def__str__(self):return%d:%s:%d:%s:%s%(self.id,self.name,self.age,self.sex,self.classid)# 自定义对应的表名默认表名app_stuclassMeta:db_tablestuverbose_name浏览学生信息verbose_name_plural学生信息管理编辑app/admin.py 文件实现信息管理的个性化定制fromdjango.contribimportadmin# Register your models here.fromapp.modelsimportStu#Stu模型的管理器(装饰器写法)admin.register(Stu)classStuAdmin(admin.ModelAdmin):#listdisplay设置要显示在列表中的字段id字段是Django模型的默认主键list_display(id,name,age,sex,classid)#设置哪些字段可以点击进入编辑界面list_display_links(id,name)#list_per_page设置每页显示多少条记录默认是100条list_per_page10#ordering设置默认排序字段负号表示降序排序ordering(id,)#-id降序#list_editable 设置默认可编辑字段#list_editable [age,sex,classid]#其他请详见手册文档说明源码仓库地址https://github.com/rwx-robot/Django-1.11.11