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还有很多内容,继续加油吧!  
                  |