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 然后按下Tab</li>
    </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<path>.*)$', 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网站的图片请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值