以前的笔记:
使用python建立一个网站:笔记1 入门_田小花的博客-CSDN博客
1、编写网站的首页
2、设计一个可以提供数据的额api请求接口
3、图片的链接地址设计
4、SSL服务
基础的pycharm和python安装过程:
安装时遇到问题,Django无法下载,无法安装,需要对pycharm进行配置,安装C++文件
寻找教程,需要安装VC++和编译环境,使用visual studio集成环境直接安装最为简便,
可以参考的教程:
创建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
URL
是Django
收到用户请求后,根据用户请求的URL
地址和urls.py
里配置的映射关系,以正确的确定出某个URL
调用哪一段逻辑代码来对应执行相应的视图函数或视图类,最后由视图返回给客户端想要接收的数据。
——wsgi.py
python框架Django与WSGI_dingpeizan8095的博客-CSDN博客
WSGI全称:Web Server Gateway Interface,是Python定义的WSGI程序和WSGI服务器之间的一种接口
现一个WSGI应用,只需要满足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/
微信小程序使用Https连接,https需要ssl证书启动,但是Django框架本身并不支持ssl证书。需要使用sslserver配合使用。sslserver的性能并不强,只能简单使用。
pip install django-sslserver
INSTALLED_APPS = (...
"sslserver",
...
)
这里放大服务器主目录下面的key文件夹。
需要两个文件,一般情况下和Nginx使用的是同一种证书,申请时直接申请Nginx即可。
server.crt和server.key文件
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
POST请求参考链接:Django 与小程序POST通信_暮寒北望的博客-CSDN博客
微信小程序使用json数据最常见方便使用,这里使用一个request请求
在微信小程序上面新建一个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)
}
})
},
在主界面主应用内首先添加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发送的按钮:
<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)
}
})
}
打开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)
22、9、26 降低python版本到403以后,出现post请求被格挡:
Django的POST请求报403,及四种解决方法 - 腾讯云开发者社区-腾讯云 (tencent.com)
重新导入pycharm环境需要将项目点击open,然后打开文件夹后,点击project setting,点击添加venv的环境后,充气pycharm就可以运行了