Django5.1建站-流程及语句==环境:windows10专业版+python版本3.12【请先安装】+pycharm版本2024.1.4【请先安装】 写作时间:2024年8月11日 -------------------------------------------------------------------------------------------------------------------------------------------------- 一、创建项目+基础设置+启动程序-显示成功页面 1、创建项目:打开pycharm-新建项目-选择Django-填写项目名称为myproject003-位置改为c:\Django-xiangmu【请手动新建这个目录】-选择生成新的-类型Vitualenv-基础python-勾选“从基础解释器中继承软件包”+“可用于所有项目”-【创建项目时,自动安装Django5.1】 2、查看已安装的库文件:打开终端(快捷键alt+f12)-输入 pip list -显示最新的django5.1版本和相应的库文件【如不符合,请修改成Django5.1】 3、创建应用app:在终端中输入 python manage.py startapp myapp001 -项目myproject003的同目录,会多出myapp001目录+db.sqlite3 4、打开myproject003目录下的setting.py文件-注册myapp001(在INSTALLED_APPS = [ ]中的末尾添加 myapp001, 注意不能丢失逗号 ) 5、继续在setting中-修改成中文显示 LANGUAGE_CODE = zh-hans 、 TIME_ZONE = Asia/Shanghai 6、点击又上角项目启动按钮(快捷键shift+f10),或在终端中输入 python manage.py runserver (退出按键 CTRL-BREAK.) 7、点击http://127.0.0.1:8000/,浏览器显示飞起的小火箭,显示Django5.0页面,说明Django项目安装成功。 -------------------------------------------------------------------------------------------------------------------------------------------------- 二、完成了后台管理内容的增、删、改、查。【models.py编辑】 8、生成项目原始+应用app的数据表【数据库sqlite3】+创建超级管理员账户和密码 打开终端(快捷键alt+f12)-输入python manage.py migrate (生成数据表) -输入python manage.py createsuperuser (创建超级管理员) 9、点击http://127.0.0.1:8000/admin,输入超级管理员账户和密码,登录后台。 10、用sqlitestudio软件【请先安装】,查看数据库文件内容-数据库文件地址 C:\Django_xiangmu\myproject003\db.sqlite3 ---打开auth_user表-点击数据-可以看到超级管理员账号和密码 11、定义数据模型:打开myapp001下models.py,输入如下代码: from django.db import models #引入django.db.models模块 #这个例子中,我们定义了两个模型类:UserInfo和PostInfo。 # UserInfo用于存储用户信息,包括用户名、密码和电子邮件地址。(后来改为”栏目列别“) # PostInfo用于存储帖子信息,包括发帖用户、标题、内容和创建时间。两个模型通过ForeignKey字段关联,确保每个帖子都关联到一个用户信息。(后来改为”内容列表“) # 输入如下模型语句后,在终端中输入 python manage.py makemigrations #生成迁移文件 # python manage.py migrate #迁移数据库,创建新表 # 就可以在 数据库sqlite3 中创建 myapp001_userinfo 和 myapp001_postinfo 这2个表及里面的字段 # 用户信息模型 class UserInfo(models.Model): username = models.CharField(max_length=30) password = models.CharField(max_length=30) email = models.EmailField() def __str__(self): return self.username # 帖子信息模型 class PostInfo(models.Model): user = models.ForeignKey(UserInfo, on_delete=models.CASCADE) title = models.CharField(max_length=50) content = models.TextField() create_time = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title 12、在数据库中创建表及字段: 输入如上模型语句后,在终端中输入 python manage.py makemigrations #生成迁移文件 python manage.py migrate #迁移数据库,创建新表 就可以在 数据库sqlite3 中创建 myapp001_userinfo 和 myapp001_postinfo 这2个表及里面的字段 13、定义好数据模型,就可以配置管理后台了,在myapp001下的admin.py文件中写入如下代码: from django.contrib import admin from .models import UserInfo,PostInfo #引入myapp001模型下面的所有数据类型 admin.site.register(UserInfo) admin.site.register(PostInfo) 14、浏览器打开后台管理页面 http://localhost:8000/ ,输入超级管理员账号和密码, 显示站点管理列表,包括创建的应用myapp001和认证-授权2个部分, 在myapp001列表下,还有创建的数据模型postinfos和userinfos这2个部分。 15、将username显示为中文”栏目类别“:(其他类似) username = models.CharField(max_length=30,verbose_name=栏目类别) 16、输入如上模型语句后,在终端中输入 python manage.py makemigrations #生成迁移文件 python manage.py migrate #迁移数据库,创建新表 ****** 提示:修改 models.py 后,必须执行如上代码,完成 数据迁移+创建新表 动作。****** 17、在admin后台管理页面,进行添加、删除、修改等操作,已增加数据库内容,并可以用数据库软件查看相关变化。 在admin后台管理页面里,添加”栏目类别“和”内容列表“3条记录内容,后面前台调用需要用到。 ****** 至此,完成了后台管理内容的增、删、改、查。 ****** -------------------------------------------------------------------------------------------------------------------------------------------------- 三、完成前台页面的显示 18、在Django中,要实现前台内容的显示, 通常需要创建模型(Models)、编写视图(Views)、设计模板(Templates),并通过URL配置将它们连接起来。 ---111---定义模型(在models.py中): from django.db import models #引入django.db.models模块 #这个例子中,我们定义了两个模型类:UserInfo和PostInfo。 # UserInfo用于存储用户信息,包括用户名、密码和电子邮件地址。 # PostInfo用于存储帖子信息,包括发帖用户、标题、内容和创建时间。两个模型通过ForeignKey字段关联,确保每个帖子都关联到一个用户信息。 # 输入如下模型语句后,在终端中输入 python manage.py makemigrations #生成迁移文件 # python manage.py migrate #迁移数据库,创建新表 # 就可以在 数据库sqlite3 中创建 myapp001_userinfo 和 myapp001_postinfo 这2个表及里面的字段 # 用户信息模型(栏目类别) class UserInfo(models.Model): username = models.CharField(max_length=30,verbose_name=栏目类别) #verbose_name=用户名称 ,username在后台显示成中文“用户名称” #password = models.CharField(max_length=30,verbose_name=密码) #email = models.EmailField(verbose_name=邮箱地址) def __str__(self): return self.username class Meta: #这3条语句,数据模型在后台管理列表显示为中文列表 verbose_name = (栏目类别) verbose_name_plural = (栏目类别) # 帖子信息模型(内容列表) class PostInfo(models.Model): user = models.ForeignKey(UserInfo, on_delete=models.CASCADE,verbose_name=栏目类别) #两个模型通过ForeignKey字段关联,确保每个帖子都关联到一个用户信息。 #好像没什么用,主要看网站的定位,就是到底要做什么样的网站,这个才有用处。 title = models.CharField(max_length=50,verbose_name=标题) content = models.TextField(verbose_name=内容) create_time = models.DateTimeField(auto_now_add=True) #写入时间,这个是写入数据库的,所以不用写成中文。 def __str__(self): return self.title class Meta: #这3条语句,数据模型在后台管理列表显示为中文列表 verbose_name = (内容列表) verbose_name_plural = (内容列表) ---222---创建视图(在views.py中): from django.shortcuts import render #渲染网页的模块 from myapp001.models import UserInfo from myapp001.models import PostInfo # Create your views here. def UserInfo_list(request): #栏目列表函数 UserInfos = UserInfo.objects.all() #读出所有数据 return render(request, UserInfo.html, {UserInfos: UserInfos}) #渲染到模板+赋值,便于在模板中调用。 def PostInfo_list(request): #内容列表函数 (同上) PostInfos = PostInfo.objects.all() return render(request, PostInfo.html, {PostInfos: PostInfos}) ---333---设计模板(在templates【请手动在myapp001目录中建立】文件夹中的UserInfo.html中)(PostInfo.html类似,可参照写出来): <!DOCTYPE html> <html> <head> <title>栏目列表</title> </head> <body> <h1>栏目列表</h1> <ul> {% for UserInfo in UserInfos %} <!--- python语句 在html中的用法 ---> <li> {{ UserInfo.username }} </li> {% empty %} <li>没有栏目列表</li> {% endfor %} </ul> </body> </html> ---444---配置URL(在urls.py中): from django.contrib import admin from django.urls import path from myapp001.views import UserInfo_list from myapp001.views import PostInfo_list from django.conf.urls import include urlpatterns = [ path(admin/, admin.site.urls), #path(, admin.site.urls), #path(myapp001/, view.UserInfo_list, name=UserInfo_list), path(userinfos/, UserInfo_list, name=UserInfo_list), #输入http://localhost:8000/userinfos显示栏目列表 #path(,include(myapp001.urls)) path(, PostInfo_list, name=PostInfo_list), ****** 至此,完成了前台显示数据库内容【可能无法链接跳转,请看以下的代码调整】 ****** -------------------------------------------------------------------------------------------------------------------------------------------------- 19、一个完整的代码,可以从头到尾的先跑一遍,再从头来过,至少还需要学50次,很多内容还没有接触到! Django按id显示内容列表的详情页 在Django中,你可以使用类视图DetailView来根据id展示内容的详情页。以下是一个简单的例子: ---111--- 首先,在你的models.py中定义你的【模型】(完整代码): from django.db import models #引入django.db.models模块 #这个例子中,我们定义了两个模型类:UserInfo和PostInfo。 # UserInfo用于存储用户信息,包括用户名、密码和电子邮件地址。(后改成”栏目类别“) # PostInfo用于存储帖子信息,包括发帖用户、标题、内容和创建时间。(后改成”内容列表“)两个模型通过ForeignKey字段关联,确保每个帖子都关联到一个用户信息。 # 输入如下模型语句后,在终端中输入 python manage.py makemigrations #生成迁移文件 # python manage.py migrate #迁移数据库,创建新表 # 就可以在 数据库sqlite3 中创建 myapp001_userinfo 和 myapp001_postinfo 这2个表及里面的字段 # 用户信息(栏目类别)模型 class UserInfo(models.Model): username = models.CharField(max_length=30,verbose_name=栏目类别) #在二级目录中显示”栏目类别“的中文,其他类似 #verbose_name=用户名称 ,username在后台显示成中文“用户名称” #password = models.CharField(max_length=30,verbose_name=密码) #email = models.EmailField(verbose_name=邮箱地址) def __str__(self): return self.username class Meta: #这3条语句,数据模型在后台管理列表显示为中文列表 verbose_name = (栏目类别) verbose_name_plural = (栏目类别) # 帖子信息(内容列表)模型 class PostInfo(models.Model): user = models.ForeignKey(UserInfo, on_delete=models.CASCADE,verbose_name=栏目类别) title = models.CharField(max_length=50,verbose_name=标题) content = models.TextField(verbose_name=内容) create_time = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title class Meta: #这3条语句,数据模型在后台管理列表显示为中文列表 verbose_name = (内容列表) verbose_name_plural = (内容列表) ---222--- 然后,在views.py中定义一个【视图】来展示详情页: from django.shortcuts import render from myapp001.models import UserInfo from myapp001.models import PostInfo from django.views.generic import DetailView #详情页使用 # Create your views here. def UserInfo_list(request): #栏目列表函数 UserInfos = UserInfo.objects.all() #列出数据库中UserInfo表的所有数据 return render(request, UserInfo.html, {UserInfos: UserInfos}) #返回并在模板中渲染+赋值 def PostInfo_list(request): #内容列表函数,同上 PostInfos = PostInfo.objects.all() return render(request, PostInfo.html, {PostInfos: PostInfos}) class PostInfoDetailView(DetailView): #详情页使用 model = PostInfo template_name = PostInfo_detail.html # 确保你有这个模板文件【请手动建立,放在myapp001目录中的Templates目录中】 ---333--- 接下来,在urls.py中添加一个【URL模式来映射】到这个视图: from django.contrib import admin from django.urls import path from myapp001.views import UserInfo_list from myapp001.views import PostInfo_list from django.conf.urls import include from myapp001.views import PostInfoDetailView #详情页使用 urlpatterns = [ path(admin/, admin.site.urls), #path(, admin.site.urls), #path(myapp001/, view.UserInfo_list, name=UserInfo_list), path(userinfos/, UserInfo_list, name=UserInfo_list), #输入http://localhost:8000/userinfos显示栏目列表 #path(,include(myapp001.urls)) path(, PostInfo_list, name=PostInfo_list), #设置默认首页为内容列表,即打开http://localhost:8000后,可看到数据库中的内容,点解链接并显示详情页。 path(PostInfo/<int:pk>/, PostInfoDetailView.as_view(), name=PostInfo-detail), #详情页链接 ] ---444--- 最后,在PostInfo_detail.html【模板放在Templates目录中】中,你可以使用模型的属性来展示详情: <!DOCTYPE html> <html> <head> <title>{{ object.title }}</title> </head> <body> PostInfo的详情页 <h1>{{ object.title }}</h1> <p>{{ object.content }}</p> </body> </html> ****** 至此,完成了打开http://localhost:8000/,显示内容+链接,点击链接显示详情内容。 ****** -------------------------------------------------------------------------------------------------------------------------------------------------- ***2024.08.11很多内容,还需要继续学习,Django还有很多内容,继续加油吧!
|