• Hold the door! 基于Django建立基础框架


    myhome server部分开发日志

    以前的笔记

    使用python建立一个网站:笔记1 入门_田小花的博客-CSDN博客

    1、编写网站的首页

    2、设计一个可以提供数据的额api请求接口

    3、图片的链接地址设计

    4、SSL服务

    22.7.2 Django创建和新的网页

    1、在win10上安装pycharm内安装Django

    基础的pycharm和python安装过程:

    安装时遇到问题,Django无法下载,无法安装,需要对pycharm进行配置,安装C++文件

    寻找教程,需要安装VC++和编译环境,使用visual studio集成环境直接安装最为简便,

    2、新建一个Django项目

    可以参考的教程:

    Django_而又何羡乎的博客-CSDN博客

    创建Django项目以后可以直接运行

    使用命令行的方式运行:

    python manage.py runserver 127.0.0.1:8080
    

    一开始只有一个admin界面用于配置

    在项目目录下一开始创建的文件有两个文件夹:

    templates文件夹

    webserver项目文件夹

    ​ ——init.py 初始化文件,程序会从这里最开始执行,可以放一些需要初始化的函数方法;

    ​ ——asgi.py ASGI(异步服务器网关接口)是 WSGI 的继承者,提供支持异步的 Python Web 服务器、框架和应用程序之间的标准接口。链接到setting文件内

    ​ ——setting.py

    配置 settings 模块

    当 ASGI 服务器加载应用程序时,Django 需要导入配置模块——完整定义应用程序的地方。

    Django 利用 DJANGO_SETTINGS_MODULE 环境变量来定位合适的配置模块。它必须包含到配置模块的点式路径。开发环境和生产环境可以配置不同值;这都取决于你是如何组织配置的。

    若未设置该变量,文件 默认将其配置为 , 即工程名字。asgi.py``mysite.settings``mysite

    ​ ——urls.py

    URLDjango收到用户请求后,根据用户请求的URL地址和urls.py里配置的映射关系,以正确的确定出某个URL调用哪一段逻辑代码来对应执行相应的视图函数或视图类,最后由视图返回给客户端想要接收的数据。

    ​ ——wsgi.py

    python框架Django与WSGI_dingpeizan8095的博客-CSDN博客

    WSGI全称:Web Server Gateway Interface,是Python定义的WSGI程序和WSGI服务器之间的一种接口

    现一个WSGI应用,只需要满足3个要求:

    1. 是可调用的,比如是一个函数,或者是一个可调用类(具有__call__方法)的实例
    2. WSGI应用应当返回一个可迭代(iterable)的值,比如字符串列表
    3. WSGI应用在返回之前,应当调用WSGI服务器传入的start_response函数发送状态码和HTTP报文头

    3、添加一个新的界面

    建立自己的url:

    打开工程的urls.py文件在urls.py内引入view的界面,这里引入templates文件夹下面的views

    from templates import views
    

    在urls.py文件,找到列表:urlpatterns,在里面增加自己路由:

    path('index/', views.index),
    

    新增url

    打开templates文件夹,在里面新建一个views.py文件

    在views内导入模块

    from django.http import HttpResponse
    from django.shortcuts import render
    

    在views内新增加处理url跳转的函数:

    def index(request):
        return render(request,"index.html")
    

    新增加前端文件

    打开templates文件夹,在里面新建一个index.html文件

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>6424网站首页title>
    head>
    <body>
        <ul>
            <li>今天天气真好li>
            <li>适合睡觉!li>
            <li>快速创建标签的方式是: 例如需要li标签 先打出 li 然后按下Tabli>
        ul>
    body>
    html>
    
    

    至此,一个新的简单demo搭建完成。

    http://172.0.0.1:8000/index/
    

    22.7.7 SSL服务

    微信小程序使用Https连接,https需要ssl证书启动,但是Django框架本身并不支持ssl证书。需要使用sslserver配合使用。sslserver的性能并不强,只能简单使用。

    1、安装 django-sslserver用于管理启动证书

    pip install django-sslserver
    

    2、打开settings.py,找到 INSTALLED_APPS 应用程序定义 添加sslserver

    INSTALLED_APPS = (...
    "sslserver",
    ...
    )
    

    3、将证书存放到目标目录下面

    这里放大服务器主目录下面的key文件夹。

    需要两个文件,一般情况下和Nginx使用的是同一种证书,申请时直接申请Nginx即可。

    server.crt和server.key文件
    

    4、确定好目录后可以直接启动:这是Windows的环境启动

    python manage.py runsslserver --cert key\server.crt --key key\server.key  127.0.0.1:8000 #8080端口
    

    运行腾讯云Ubuntu上面的服务器的正确姿势:

    python manage.py runsslserver --cert key/server.crt --key key/server.key  0.0.0.0:8080
    

    网址:

    https://xtcee.xyz:8080/index/
    

    【Django】Django项目会加载两次(代码初始化执行两次)_冰冷的希望的博客-CSDN博客_django noreload

    python manage.py runsslserver --cert key\server.crt --key key\server.key  127.0.0.1:8000 --noreload
    

    22.7.10微信小程序的后台的API链接:

    POST请求参考链接:Django 与小程序POST通信_暮寒北望的博客-CSDN博客

    微信小程序使用json数据最常见方便使用,这里使用一个request请求

    一、GET请求

    微信小程序内代码实现:

    在微信小程序上面新建一个GET请求的按钮,

    index.wxml文件,在界面上添加对应的按钮:

    <view>
        <button class="test" bindtap="buttonGetTest">Get请求button>
     view>
    

    index.js文件,添加新的按钮实现方法,按钮后端的实现方法:

      buttonGetTest() {
        console.log("发送了一个Get请求");
        wx.request({
          //url: 'https://xtcee.xyz:8080/api/getApi', //仅为示例,并非真实的接口地址
          url: 'https://127.0.0.1:8000/api/test_api', //仅为示例,并非真实的接口地址
          header: {
            'content-type': 'application/json' // 默认值
          },
          success (res) {
            console.log(res.data)
          }
        })
      },
    
    Django服务器内实习代码:

    在主界面主应用内首先添加url:

    Webserver/urls.py

    from django.contrib import admin
    from django.urls import path, include
    from templates import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('hello/', views.hello),
        path('index/', views.index),
        path('setTime/', views.setTime),
        path('api/', include('api.urls')),
    ]
    

    其中api url会链接到api应用内:

    api/urls.py 在api的url内是后一级要实现的代码接口,后面链接到了具体的后端逻辑

    from django.views.static import serve
    
    from api import views
    
    from WebServer import settings
    from django.urls import re_path
    
    urlpatterns = [
        re_path(r'test_api/', views.test_api, name='test_api'),
        re_path(r'getApi/', views.getApi, name='getApi'),
        re_path(r'postApi/', views.postApi, name='postApi'),
        re_path(r'^images/(?P.*)$', serve, {"document_root": settings.STATICFILES_DIRS[0]}),
    ]
    

    api/views.py 在api应用文件夹下面的views.py文件内实现了具体的操作方法

    from django.http import HttpResponse
    import json
    import time
    def test_api(request):
        #协议
        JsonProtocol = [{ "verision" : 1.0 , "userID":10000 , "userPassword": 12345 , "oneKey": 1 , "userPicture" : "none"}]
        return HttpResponse(json.dumps(JsonProtocol)) #以字符串作为内容的HTTP响应类。可以读取、追加或替换此内容。
    
    def getApi(request):
        #协议
        if request.method == 'GET':
            JsonProtocol = [{ "verision" : 1.0 , "userID":10000 , "userPassword": 12345 , "getKey": 1 , "userPicture" : "none"}]
            return HttpResponse(json.dumps(JsonProtocol)) #以字符串作为内容的HTTP响应类。可以读取、追加或替换此内容。
    
    

    二、POST请求

    微信小程序内实现代码逻辑

    现在微信小程序内设置一个post发送的按钮:

      <view>
        <button class="test" bindtap="buttonPostTest">Post请求button>
      view>
    

    链接到post请求按钮的逻辑链接到对应的实现函数:

    buttonPostTest() {
        console.log("发送了一个Post请求");
        wx.request({
          //url: 'https://xtcee.xyz:8080/api/postApi', //仅为示例,并非真实的接口地址
          url: 'https://127.0.0.1:8000/api/postApi/', 
          method:'POST', // 请求方式POST
          data:{
            testdata:'这是一个测试字符串',
          },
          header: {
            'Content-type': 'application/json' // 默认值
          },
          success (res) {
            console.log(res.data)
          },
          complete: function( res ) { 
            console.log(res.data)
          }
        })
        
      }
    
    Django实现逻辑

    打开settings.py设置文件找到下面代码将其注释掉

    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',
    ]
    

    打开urls.py文件,添加url

    from django.contrib import admin
    from django.urls import path, include
    from templates import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('hello/', views.hello),
        path('index/', views.index),
        path('setTime/', views.setTime),
        path('api/', include('api.urls')),
    ]
    

    去到对应的api应用文件夹下面的urls.py文件

    from django.contrib import admin
    from django.urls import path, include
    from templates import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('hello/', views.hello),
        path('index/', views.index),
        path('setTime/', views.setTime),
        path('api/', include('api.urls')),
    ]
    

    最终在对应的api应用文件夹下面的视图管理层views.py文件内实现对应的post api应用

    from django.http import HttpResponse
    import json
    
    def postApi(request):
        #协议
        if request.method == 'POST':
            print("检测到了POST请求")
            JsonProtocol = [{ "verision" : 1.0 , "userID":10000 , "userPassword": 12345 , "PostKey": 1 , "userPicture" : "none"}]
            #return HttpResponse(json.dumps(JsonProtocol)) #以字符串作为内容的HTTP响应类。可以读取、追加或替换此内容。
            concat = request.POST
            postBody = request.body
            print(concat)
            print(type(postBody))
            print(postBody)
            json_result = json.loads(postBody)
            print(json_result)
            return HttpResponse(JsonProtocol)
    

    post 403

    22、9、26 降低python版本到403以后,出现post请求被格挡:

    Django的POST请求报403,及四种解决方法 - 腾讯云开发者社区-腾讯云 (tencent.com)

    重新导入pycharm环境需要将项目点击open,然后打开文件夹后,点击project setting,点击添加venv的环境后,充气pycharm就可以运行了

    22.7.10网站的图片请求

  • 相关阅读:
    mybatis配置文件模板及常用标签介绍说明
    Python代码中引用已经写好的模块、方法
    【C++设计模式之工厂方法模式】分析及示例
    MindSponge分子动力学模拟——自建力场(2024.03)
    如何选择最适转录本序列构建过表达质粒
    JUC第七讲:关键字final详解
    内网穿透ngrok
    charles抓包配置具体操作步骤
    在iframe标签中操作外层dom
    GPT-3:自然语言处理的预训练模型
  • 原文地址:https://blog.csdn.net/qq_44179528/article/details/127102380