django搭建一个AI博客进行YouTube视频自动生成文字博客

慈云数据 7个月前 (05-09) 技术支持 211 0

文章目录

  • 一、生成Django框架
  • 二、项目代码(前端)
    • 1、编写前端代码(正文界面)
      • 1.1、生产html框架
      • 1.2、添加live preview扩展
      • 1.3、更改title元素中文本
      • 1.4、添加CDN(CSS)样式链接
      • 1.5、nav标签
      • 1.6、在body标签中添加类
      • 1.7、nav下创建div标签
      • 1.8、当前界面预览
      • 1.9、在div标签后添加footer
      • 1.10、完整代码
      • 2、编写前端代码(登录注册界面)
        • 2.1、创建html框架并添加cdn样式表
        • 2.2、创建密码登录框(完整代码)
        • 3、编写前端代码(注册页面)
          • 3.1、完整代码
          • 4、编写前端代码(文章保存记录)
            • 4.1、完整代码
            • 5、编写前端代码(文章页面)
              • 5.1、完整代码
              • 三、Django代码(后端)
                • 1、添加app功能
                • 2、blog_generato添加index视图(views.py)
                • 3、添加数据库
                • 4、创建管理员用户
                  • 4.1、后台中文化
                  • 4.2、在blog_generato下的urls.py中添加url
                  • 4.3、将注册登录html页面添加到views中
                  • 5、获取ai转换
                  • 6、获取openai秘钥
                  • 四、修改后的完整代码(前后端)
                    • 1、 ai_blog_app--> settings.py
                    • 2、ai_blog_app--> urls.py
                    • 3、ai_blog_app --> _init_.py
                    • 4、blog_generato --> admin.py
                    • 5、blog_generato --> models.py
                    • blog_generato --> urls.py
                    • 7、 blog_generato --> viwes.py
                    • 8、templates --> all-logs.html(修改后)
                    • 9、templates -->blog-details.html(修改后)
                    • 10、templates -->index.html(修改后)
                    • 11、templates -->https://blog.csdn.net/weixin_44774550/article/details/login.html(修改后)
                    • 12、templates -->https://blog.csdn.net/weixin_44774550/article/details/signup.html(修改后)

                      一、生成Django框架

                      我这里使用的是PyCharm 2021.3.3

                      创建流程:

                      • 打开PyCharm
                      • 点击左上角File
                      • 选择New Project
                      • 选择Django
                      • 最后点击Create
                      • 然后在Django项目中添加一个文件夹,以便用来保存html文件

                        在这里插入图片描述

                        二、项目代码(前端)

                        1、编写前端代码(正文界面)

                        1.1、生产html框架

                        使用Visual Studio Code打开你刚刚在django项目创建的用来编写html文件的文件夹

                        首先创建一个index.html文件

                        在这里插入图片描述

                        英文感叹号加回车键生成html框架

                        在这里插入图片描述

                        1.2、添加live preview扩展

                        Live Preview 扩展的作用是在VSCode内部实现边写边预览的效果。

                        这个扩展主要用于HTML文件,它允许开发者在编写代码的同时实时查看代码渲染的效果,而不需要离开编辑器或打开浏览器。具体来说,Live Preview 扩展提供了以下几个便利的功能:

                        实时预览:当你在编辑HTML文件时,任何对代码的更改都会立即反映在预览窗口中,这样你可以即时看到改动效果,提高开发效率

                        高度集成:作为微软官方插件,Live Preview与VSCode的集成程度非常高,使用起来非常流畅和方便。

                        简化操作:相比于其他如LiveServer等插件,Live Preview无需额外的保存和重启服务步骤,减少了繁琐的操作流程。

                        易于安装:你可以通过VSCode的扩展商店直接搜索并安装Live Preview,安装过程简单快捷。

                        自定义布局:你可以根据自己的需要调整预览窗口的位置,选择向上/下/左/右拆分,以适应不同的工作流程和屏幕布局。

                        在这里插入图片描述

                        直接安装即可

                        右键点击index.html文件,然后选择显示预览

                        在这里插入图片描述

                        1.3、更改title元素中文本

                        更改第六行的title元素

                        AI 博客
                        

                        然后ctrl + s保存

                        1.4、添加CDN(CSS)样式链接

                        在第七行添加css的链接

                         
                        

                        1.5、nav标签

                        从第十一行开始为nav标签

                            
                                
                            
                        

                        在第一个nav标签中添加一个类

                            
                            
                        

                        在nav标签中添加div标签

                        AI 博客生成器

                        1.6、在body标签中添加类

                         
                        

                        1.7、nav下创建div标签

                        创建h2标签之前先要创建三对div标签,三十八行到四十五行

                           

                        欢迎来到AI博客生成器

                        在最后一对div标签中创建h2和p标签

                           

                        欢迎来到AI博客生成器

                        使用人工智能从YouTube视频中生成高质量的博客文章。 只需输入链接到下面的YouTube视频,让人工智能为你创建内容!

                        为前面两对div添加元素

                           

                        欢迎来到AI博客生成器

                        使用人工智能从YouTube视频中生成高质量的博客文章。 只需输入链接到下面的YouTube视频,让人工智能为你创建内容!

                        1.8、当前界面预览

                        在这里插入图片描述

                        在第二对div标签中添加内容

                            

                        欢迎来到AI博客生成器

                        使用人工智能从YouTube视频中生成高质量的博客文章。 只需输入链接到下面的YouTube视频,让人工智能为你创建内容!


                        请输入YouTube视频链接

                        提交

                        添加section标签

                            

                        欢迎来到AI博客生成器

                        使用人工智能从YouTube视频中生成高质量的博客文章。 只需输入链接到下面的YouTube视频,让人工智能为你创建内容!


                        请输入YouTube视频链接

                        提交

                        生产博客文章

                        1.9、在div标签后添加footer

                            
                                作者YouTube链接
                            
                        

                        1.10、完整代码

                        
                        
                            
                            
                            AI 博客
                            
                            
                                @keyframes rotatehttps://blog.csdn.net/weixin_44774550/article/details/{
                                    fromhttps://blog.csdn.net/weixin_44774550/article/details/{
                                        transform: rotate(0deg);
                                    }
                                    tohttps://blog.csdn.net/weixin_44774550/article/details/{
                                        transform: rotate(360deg);
                                    }
                                }
                                @-webkit-keyframes rotatehttps://blog.csdn.net/weixin_44774550/article/details/{
                                    fromhttps://blog.csdn.net/weixin_44774550/article/details/{
                                        -webkit-transform: rotate(0deg);
                                    }
                                    tohttps://blog.csdn.net/weixin_44774550/article/details/{
                                        -webkit-transform: rotate(360deg);
                                    }
                                }
                                .loadhttps://blog.csdn.net/weixin_44774550/article/details/{
                                    width: 100px;
                                    height: 100px;
                                    margin: 110px auto 0;
                                    border: solid 10px #8822aa;
                                    border-radius: 50%;
                                    border-right-color: transparent;
                                    border-bottom-color: transparent ;
                                     -webkit-transform: all 0.5s ease-in;
                                    -webkit-animation-name: rotate;
                                    -webkit-animation-duration: 1.0s;
                                    -webkit-animation-iteration-count: infinite;
                                    -webkit-animation-timing-function: linear;
                                        transition: all 0.5s ease-in;
                                        animation-name: rotate;
                                        animation-iteration-count: infinite;
                                        animation-timing-function: linear;
                                }
                            
                        
                        
                            
                                

                        AI 博客生成器



                        欢迎来到AI博客生成器

                        使用人工智能从YouTube视频中生成高质量的博客文章。 只需输入链接到下面的YouTube视频,让人工智能为你创建内容!


                        请输入YouTube视频链接

                        提交

                        生产博客文章

                        作者YouTube链接

                        在这里插入图片描述

                        2、编写前端代码(登录注册界面)

                        2.1、创建html框架并添加cdn样式表

                        
                        
                            
                            
                            AI博客-登录
                            
                        
                        
                        
                        
                        

                        2.2、创建密码登录框(完整代码)

                        
                        
                            
                            
                            AI博客-登录
                            
                        
                        
                            
                                

                        AI 博客生成器

                        登录

                        用户名
                        密码
                        登录

                        在这里插入图片描述

                        3、编写前端代码(注册页面)

                        3.1、完整代码

                        
                        
                            
                            
                            AI博客-注册
                            
                        
                        
                            
                                

                        AI 博客生成器


                        注册

                        用户名
                        邮箱地址
                        密码
                        密码确认
                        注册

                        在这里插入图片描述

                        4、编写前端代码(文章保存记录)

                        4.1、完整代码

                        
                        
                            
                            
                            AI博客-历史记录
                            
                        
                        
                            
                                

                        AI 博客生成器



                        AI博客-历史记录

                        博客文章标题1

                        这是博客文章的内容,非常感谢

                        博客文章标题1

                        这是博客文章的内容,非常感谢








                        作者YouTube链接

                        在这里插入图片描述

                        5、编写前端代码(文章页面)

                        5.1、完整代码

                        
                        
                            
                            
                            博客文章
                            
                        
                        
                            
                                

                        AI 博客生成器

                        博客文章详情

                        博客文章标题

                        博客文章内容


                        YouTube标题

                        YouTube视频标签

                        YouTube链接

                        https://www.youtube.com







                        作者YouTube链接

                        三、Django代码(后端)

                        1、添加app功能

                        ai_blog_app是生成django模版时随着django生成的

                        在这里插入图片描述

                        INSTALLED_APPS = [
                            'django.contrib.admin',
                            'django.contrib.auth',
                            'django.contrib.contenttypes',
                            'django.contrib.sessions',
                            'django.contrib.messages',
                            'django.contrib.staticfiles',
                            'blog_generato'
                        ]
                        

                        然后将ai_blog_app中的urls.py复制到blog_generato中

                        在这里插入图片描述

                        在blog_generato下的urls.py中添加url

                        from  . import views
                        from django.urls import path
                        urlpatterns = [
                            path('', views.index,name="index"),
                        ]
                        

                        2、blog_generato添加index视图(views.py)

                        首先在ai_blog_app的urls.py文件中添加url路径

                        from django.contrib import admin
                        from django.urls import path,include
                        urlpatterns = [
                            path('admin/', admin.site.urls),
                            path('',include('blog_generato.urls'))
                        ]
                        

                        创建一个templates文件夹用来存放html前端代码,然后在ai_blog_app的settings.py问价中添加BASE_DIR , ‘templates’

                        TEMPLATES = [
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                                'DIRS': [BASE_DIR , 'templates']
                                ,
                                'APP_DIRS': True,
                                'OPTIONS': https://blog.csdn.net/weixin_44774550/article/details/{
                                    'context_processors': [
                                        'django.template.context_processors.debug',
                                        'django.template.context_processors.request',
                                        'django.contrib.auth.context_processors.auth',
                                        'django.contrib.messages.context_processors.messages',
                                    ],
                                },
                            },
                        ]
                        

                        3、添加数据库

                        首先连接mysql数据库

                        在这里插入图片描述

                        在这里插入图片描述

                        根据自己使用的数据库来选择

                        注意:记得pip instal pymysql来安装mysql,然后在ai_blog_app下的_init_.py中添加代码,且已经创建好了django中需要使用的mysql环境

                        import pymysql
                        pymysql.install_as_MySQLdb()
                        

                        然后更改ai_blog_app下settings.py中的mysql配置

                        DATABASES = https://blog.csdn.net/weixin_44774550/article/details/{
                            'default': https://blog.csdn.net/weixin_44774550/article/details/{
                                'ENGINE': 'django.db.backends.mysql',
                                'NAME': 'ai_blog_app',
                                'USER': 'root',
                                'PASSWORD': 'yuan3128..',
                                'HOST': 'localhost',
                                'PORT': '3306',
                            }
                        

                        最后进行数据库迁移

                        PS E:\ai_blog_app> python manage.py makemigrations
                        PS E:\ai_blog_app> python manage.py migrate
                        

                        4、创建管理员用户

                        PS E:\ai_blog_app> python manage.py createsuperuser
                        Username (leave blank to use 'yuanl'): (用户名)
                        Email address: (邮箱)
                        Password: (密码)
                        Password (again):(再次输入密码)
                        Superuser created successfully.
                        

                        然后运行django项目,在浏览器中输入http://127.0.0.1:8000/admin进入后台管理页面

                        在这里插入图片描述

                        4.1、后台中文化

                        在seetings.py文件中将配置项LANGUAGE_CODE的值设置为“zh-Hans” ,TIME_ZONE的值设置为"Asia/Shanghai"

                        在seetings.py文件中配置项MIDDLEWARE(中间件)中添加本地化中间件

                        “django.middleware.locale.LocaleMiddleware”

                        LANGUAGE_CODE = 'zh-Hans'
                        TIME_ZONE = 'UTC'
                        USE_I18N = True
                        USE_TZ = True
                        

                        4.2、在blog_generato下的urls.py中添加url

                        urlpatterns = [
                            path('', views.index,name="index"),
                            path('https://blog.csdn.net/weixin_44774550/article/details/login', views.https://blog.csdn.net/weixin_44774550/article/details/login, name="https://blog.csdn.net/weixin_44774550/article/details/login"),
                            path('https://blog.csdn.net/weixin_44774550/article/details/signup', views.https://blog.csdn.net/weixin_44774550/article/details/signup, name="https://blog.csdn.net/weixin_44774550/article/details/signup"),
                            path('logout', views.logout, name="logout"),
                        ]
                        

                        4.3、将注册登录html页面添加到views中

                        from django.shortcuts import render
                        # Create your views here.
                        def index(request):
                            return render(request,'index.html')
                        def user_https://blog.csdn.net/weixin_44774550/article/details/login(request):
                            return render(request,'https://blog.csdn.net/weixin_44774550/article/details/login.html')
                        def user_https://blog.csdn.net/weixin_44774550/article/details/signup(request):
                            return render(request,'https://blog.csdn.net/weixin_44774550/article/details/signup.html')
                        

                        修改https://blog.csdn.net/weixin_44774550/article/details/signup.html中的代码

                         
                        

                        修改https://blog.csdn.net/weixin_44774550/article/details/login.html中的代码

                         
                        

                        5、获取ai转换

                        地址:https://www.assemblyai.com/

                        注意:assemblyai库和websockets版本在10.0到11.0之间(根据自己的版本进行安装)

                        在这里插入图片描述

                        修改ai_blog_app中settings.py文件,并创建一个media文件夹

                        """
                        Django settings for ai_blog_app project.
                        Generated by 'django-admin startproject' using Django 5.0.
                        For more information on this file, see
                        https://docs.djangoproject.com/en/5.0/topics/settings/
                        For the full list of settings and their values, see
                        https://docs.djangoproject.com/en/5.0/ref/settings/
                        """
                        import os.path
                        from pathlib import Path
                        import os
                        # Build paths inside the project like this: BASE_DIR / 'subdir'.
                        BASE_DIR = Path(__file__).resolve().parent.parent
                        # Quick-start development settings - unsuitable for production
                        # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
                        # SECURITY WARNING: keep the secret key used in production secret!
                        SECRET_KEY = 'django-insecure-am#drmftow4qax@!l4v%_jg%pcr5)!@ibi*%@g(%he%!-i88#8'
                        # SECURITY WARNING: don't run with debug turned on in production!
                        DEBUG = True
                        ALLOWED_HOSTS = []
                        # Application definition
                        INSTALLED_APPS = [
                            'django.contrib.admin',
                            'django.contrib.auth',
                            'django.contrib.contenttypes',
                            'django.contrib.sessions',
                            'django.contrib.messages',
                            'django.contrib.staticfiles',
                            'blog_generato',
                        ]
                        MIDDLEWARE = [
                            'django.middleware.security.SecurityMiddleware',
                            'django.contrib.sessions.middleware.SessionMiddleware',
                            'django.middleware.common.CommonMiddleware',
                            'django.middleware.csrf.CsrfViewMiddleware',
                            'django.contrib.auth.middleware.AuthenticationMiddleware',
                            'django.contrib.messages.middleware.MessageMiddleware',
                            'django.middleware.clickjacking.XFrameOptionsMiddleware',
                        ]
                        ROOT_URLCONF = 'ai_blog_app.urls'
                        TEMPLATES = [
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                                'DIRS': [BASE_DIR , 'templates']
                                ,
                                'APP_DIRS': True,
                                'OPTIONS': https://blog.csdn.net/weixin_44774550/article/details/{
                                    'context_processors': [
                                        'django.template.context_processors.debug',
                                        'django.template.context_processors.request',
                                        'django.contrib.auth.context_processors.auth',
                                        'django.contrib.messages.context_processors.messages',
                                    ],
                                },
                            },
                        ]
                        WSGI_APPLICATION = 'ai_blog_app.wsgi.application'
                        # Database
                        # https://docs.djangoproject.com/en/5.0/ref/settings/#databases
                        # DATABASES = https://blog.csdn.net/weixin_44774550/article/details/{
                        #     'default': https://blog.csdn.net/weixin_44774550/article/details/{
                        #         'ENGINE': 'django.db.backends.sqlite3',
                        #         'NAME': BASE_DIR / 'db.sqlite3',
                        #     }
                        # }
                        DATABASES = https://blog.csdn.net/weixin_44774550/article/details/{
                            'default': https://blog.csdn.net/weixin_44774550/article/details/{
                                'ENGINE': 'django.db.backends.mysql',
                                'NAME': 'ai_blog_app',
                                'USER': 'root',
                                'PASSWORD': 'yuan3128..',
                                'HOST': '127.0.0.1',
                                'PORT': '3306',
                            }
                        }
                        # Password validation
                        # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators
                        AUTH_PASSWORD_VALIDATORS = [
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
                            },
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
                            },
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
                            },
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
                            },
                        ]
                        # Internationalization
                        # https://docs.djangoproject.com/en/5.0/topics/i18n/
                        LANGUAGE_CODE = 'zh-Hans'
                        TIME_ZONE = 'UTC'
                        USE_I18N = True
                        USE_TZ = True
                        # Static files (CSS, JavaScript, Images)
                        # https://docs.djangoproject.com/en/5.0/howto/static-files/
                        STATIC_URL = 'static/'
                        # Default primary key field type
                        # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
                        DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
                        MEDIA_URL = '/media/'
                        MEDIA_ROOT = os.path.join(BASE_DIR,'media')
                        LOGIN_URL = 'https://blog.csdn.net/weixin_44774550/article/details/login'
                        

                        6、获取openai秘钥

                        地址:https://platform.openai.com/

                        因为地区原因无法注册

                        所以转文字功能无法使用

                        四、修改后的完整代码(前后端)

                        在这里插入图片描述

                        1、 ai_blog_app–> settings.py

                        import os.path
                        from pathlib import Path
                        import os
                        # Build paths inside the project like this: BASE_DIR / 'subdir'.
                        BASE_DIR = Path(__file__).resolve().parent.parent
                        # Quick-start development settings - unsuitable for production
                        # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
                        # SECURITY WARNING: keep the secret key used in production secret!
                        SECRET_KEY = 'django-insecure-am#drmftow4qax@!l4v%_jg%pcr5)!@ibi*%@g(%he%!-i88#8'
                        # SECURITY WARNING: don't run with debug turned on in production!
                        DEBUG = True
                        ALLOWED_HOSTS = []
                        # Application definition
                        INSTALLED_APPS = [
                            'django.contrib.admin',
                            'django.contrib.auth',
                            'django.contrib.contenttypes',
                            'django.contrib.sessions',
                            'django.contrib.messages',
                            'django.contrib.staticfiles',
                            'blog_generato',
                        ]
                        MIDDLEWARE = [
                            'django.middleware.security.SecurityMiddleware',
                            'django.contrib.sessions.middleware.SessionMiddleware',
                            'django.middleware.common.CommonMiddleware',
                            'django.middleware.csrf.CsrfViewMiddleware',
                            'django.contrib.auth.middleware.AuthenticationMiddleware',
                            'django.contrib.messages.middleware.MessageMiddleware',
                            'django.middleware.clickjacking.XFrameOptionsMiddleware',
                        ]
                        ROOT_URLCONF = 'ai_blog_app.urls'
                        TEMPLATES = [
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                                'DIRS': [BASE_DIR , 'templates']
                                ,
                                'APP_DIRS': True,
                                'OPTIONS': https://blog.csdn.net/weixin_44774550/article/details/{
                                    'context_processors': [
                                        'django.template.context_processors.debug',
                                        'django.template.context_processors.request',
                                        'django.contrib.auth.context_processors.auth',
                                        'django.contrib.messages.context_processors.messages',
                                    ],
                                },
                            },
                        ]
                        WSGI_APPLICATION = 'ai_blog_app.wsgi.application'
                        # Database
                        # https://docs.djangoproject.com/en/5.0/ref/settings/#databases
                        # DATABASES = https://blog.csdn.net/weixin_44774550/article/details/{
                        #     'default': https://blog.csdn.net/weixin_44774550/article/details/{
                        #         'ENGINE': 'django.db.backends.sqlite3',
                        #         'NAME': BASE_DIR / 'db.sqlite3',
                        #     }
                        # }
                        DATABASES = https://blog.csdn.net/weixin_44774550/article/details/{
                            'default': https://blog.csdn.net/weixin_44774550/article/details/{
                                'ENGINE': 'django.db.backends.mysql',
                                'NAME': 'ai_blog_app',
                                'USER': 'root',
                                'PASSWORD': 'yuan3128..',
                                'HOST': '127.0.0.1',
                                'PORT': '3306',
                            }
                        }
                        # Password validation
                        # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators
                        AUTH_PASSWORD_VALIDATORS = [
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
                            },
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
                            },
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
                            },
                            https://blog.csdn.net/weixin_44774550/article/details/{
                                'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
                            },
                        ]
                        # Internationalization
                        # https://docs.djangoproject.com/en/5.0/topics/i18n/
                        LANGUAGE_CODE = 'zh-Hans'
                        TIME_ZONE = 'UTC'
                        USE_I18N = True
                        USE_TZ = True
                        # Static files (CSS, JavaScript, Images)
                        # https://docs.djangoproject.com/en/5.0/howto/static-files/
                        STATIC_URL = 'static/'
                        # Default primary key field type
                        # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
                        DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
                        MEDIA_URL = '/media/'
                        MEDIA_ROOT = os.path.join(BASE_DIR,'media')
                        LOGIN_URL = 'https://blog.csdn.net/weixin_44774550/article/details/login'
                        

                        2、ai_blog_app–> urls.py

                        from django.contrib import admin
                        from django.urls import path,include
                        from django.conf import settings
                        from django.conf.urls.static import static
                        urlpatterns = [
                            path('admin/', admin.site.urls),
                            path('',include('blog_generato.urls'))
                        ]
                        urlpatterns =urlpatterns+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
                        

                        3、ai_blog_app --> init.py

                        import pymysql
                        pymysql.install_as_MySQLdb()
                        

                        4、blog_generato --> admin.py

                        from django.contrib import admin
                        from .models import BlogPost
                        # Register your models here.
                        admin.site.register(BlogPost)
                        

                        5、blog_generato --> models.py

                        from django.db import models
                        from django.contrib.auth.models import User
                        # Create your models here.
                        class BlogPost(models.Model):
                            user = models.ForeignKey(User,on_delete=models.CASCADE)
                            youtube_title = models.CharField(max_length=3000)
                            youtube_link = models.URLField()
                            generated_content = models.TextField()
                            created_at = models.DateTimeField(auto_now_add=True)
                            def __str__(self):
                                return  self.youtube_title
                        

                        blog_generato --> urls.py

                        from . import views
                        from django.urls import path
                        urlpatterns = [
                            path('', views.index, name="index"),
                            path('https://blog.csdn.net/weixin_44774550/article/details/login', views.user_https://blog.csdn.net/weixin_44774550/article/details/login, name="https://blog.csdn.net/weixin_44774550/article/details/login"),
                            path('https://blog.csdn.net/weixin_44774550/article/details/signup', views.user_https://blog.csdn.net/weixin_44774550/article/details/signup, name="https://blog.csdn.net/weixin_44774550/article/details/signup"),
                            path('logout', views.user_logout, name="logout"),
                            path('generate', views.generate_blog, name="generate"),
                            path('blog-list', views.blog_list, name="blog-list"),
                            path('blog-details//', views.blog_details, name="blog-details"),
                        ]
                        

                        7、 blog_generato --> viwes.py

                        import json
                        import os.path
                        import os
                        from django.contrib.auth.models import User
                        from django.contrib.auth import authenticate,https://blog.csdn.net/weixin_44774550/article/details/login,logout
                        from django.shortcuts import render,redirect
                        from django.contrib.auth.decorators import https://blog.csdn.net/weixin_44774550/article/details/login_required
                        from django.views.decorators.csrf import csrf_exempt
                        from django.http import JsonResponse
                        from pytube import YouTube
                        from django.conf import settings
                        import assemblyai as aai
                        # (无法注册)import openai
                        from .models import BlogPost
                        # Create your views here.
                        @https://blog.csdn.net/weixin_44774550/article/details/login_required
                        def index(request):
                            return render(request,'index.html')
                        @csrf_exempt
                        def generate_blog(request):
                            if request.method == 'POST':
                                try:
                                    data = json.loads(request.body)
                                    yt_link = data['link']
                                    return JsonResponse(https://blog.csdn.net/weixin_44774550/article/details/{'content':yt_link})
                                except(KeyError,json.JSONDecodeError):
                                    return JsonResponse(https://blog.csdn.net/weixin_44774550/article/details/{'error':'无效的链接'},status=304)
                                title = yt_title(yt_link)
                                transcription = get_transcription(yt_link)
                                if not transcription:
                                    return JsonResponse(https://blog.csdn.net/weixin_44774550/article/details/{'error':'未能获得转录'},status=500)
                                blog_content = generate_blog_from_transcription(transcription)
                                if not blog_content:
                                    return JsonResponse(https://blog.csdn.net/weixin_44774550/article/details/{'error': '未能获得转录'}, status=500)
                                new_blog_article = BlogPost.objects.create(
                                    user= request.user,
                                    youtube_title=title,
                                    youtube_link=yt_link,
                                    generated_content=blog_content,
                                )
                                new_blog_article.save()
                                return JsonResponse(https://blog.csdn.net/weixin_44774550/article/details/{'content':blog_content})
                            else:
                                return JsonResponse(https://blog.csdn.net/weixin_44774550/article/details/{'error':'无效的请求'},status=404)
                        def yt_title(link):
                            yt = YouTube(link)
                            title = yt.title
                            return title
                        def download_audio(link):
                            yt = YouTube(link)
                            video = yt.streams.filter(only_audio=True).first()
                            out_file = video.download(output_path=settings.MEDIA_ROOT)
                            base,ext = os.path.splitext(out_file)
                            new_file = base + '.mp3'
                            os.rename(out_file,new_file)
                            return new_file
                        def get_transcription(link):
                            audio_file = download_audio(link)
                            aai.settings.api_key = '5184545617204a3f80ef1fffc0a1056c'
                            transcriber = aai.Transcriber
                            transcriber = transcriber.transcriber(audio_file)
                            return transcriber.text
                        def generate_blog_from_transcription(transcription):
                            openai.api_key =" "
                            prompt = f"Base on the following transcript from a YouTuBe vido,write a comprehensive blog article,write it based on the transcript,but dont make it look like a youtube video,make it look like a proper blog article:\n\nhttps://blog.csdn.net/weixin_44774550/article/details/{transcription}\n\nArticle:"
                            response = openai.Completion.create(
                                model = "text-davinci-003",
                                prompt = prompt,
                                max_tokens = 1000
                            )
                            generated_content = response.choices[0].text.strip()
                            return generated_content
                        def blog_list(request):
                            blog_articles = BlogPost.objects.filter(user=request.user)
                            return render(request,"all-logs.html",https://blog.csdn.net/weixin_44774550/article/details/{'blog_articles':blog_articles})
                        def blog_details(request,pk):
                            blog_article_detail = BlogPost.objects.get(id=pk)
                            if request.user == blog_article_detail.user:
                                return  render(request,'blog-details.html',https://blog.csdn.net/weixin_44774550/article/details/{'blog_article_detail':blog_article_detail})
                            else:
                                return redirect('/')
                        def user_https://blog.csdn.net/weixin_44774550/article/details/login(request):
                            if request.method == 'POST':
                                username = request.POST['username']
                                password = request.POST['password']
                                user = authenticate(request,username=username,password=password)
                                if user is not None:
                                    https://blog.csdn.net/weixin_44774550/article/details/login(request,user)
                                    return redirect('/')
                                else:
                                    error_message='没有该用户或密码错误'
                                    return render(request,'https://blog.csdn.net/weixin_44774550/article/details/login.html',https://blog.csdn.net/weixin_44774550/article/details/{'error_message':error_message})
                            return render(request,'https://blog.csdn.net/weixin_44774550/article/details/login.html')
                        def user_https://blog.csdn.net/weixin_44774550/article/details/signup(request):
                            if request.method == 'POST':
                                username = request.POST['username']
                                email = request.POST['email']
                                password = request.POST['password']
                                repeatPassword = request.POST['repeatPassword']
                                if password == repeatPassword:
                                    try:
                                        user = User.objects.create_user(username,email,password)
                                        user.save()
                                        https://blog.csdn.net/weixin_44774550/article/details/login(request,user)
                                        return redirect('/')
                                    except:
                                        error_message='创建账号失败'
                                        return render(request, 'https://blog.csdn.net/weixin_44774550/article/details/signup.html', https://blog.csdn.net/weixin_44774550/article/details/{'errot_message': error_message})
                                else:
                                    error_message = '密码输入错误'
                                    return  render(request,'https://blog.csdn.net/weixin_44774550/article/details/signup.html', https://blog.csdn.net/weixin_44774550/article/details/{'errot_message':error_message})
                            return render(request,'https://blog.csdn.net/weixin_44774550/article/details/signup.html')
                        def user_logout(request):
                            logout(request)
                            return redirect('/')
                        

                        8、templates --> all-logs.html(修改后)

                        
                        
                            
                            
                            AI博客-历史记录
                            
                        
                        
                            
                                

                        AI 博客生成器



                        AI博客-历史记录

                        https://blog.csdn.net/weixin_44774550/article/details/{% for article in blog_articles reversed %}
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon