开发实践0

2023-11-30

以下学习 朔宁夫 课程。(Python)

记点废话:“实现所想”。

路径 ①基础:设计模式 视图 模型 模板 跳转 ②进阶:静态资源 CSRF Web状态 后台管理 分页 缓存 中间件 RESTfull ③实践:编码 GIT协作 上线部署

认真摄入。多动手。

//术语

架构:

        CS(Client/Server 客户端-服务端架构 缺点:不同系统要研发不同版本的客户端;对客户端的硬件有要求)

        BS(Browser/Server 浏览器-服务端架构 特殊的CS 本地浏览器相当于客户端  缺点:数据安全;对服务器计算能力要求高;传输速度)

开发模式:(降低代码模块间的耦合程度)

        MVC(Model处理数据逻辑的模型 View用户交互页面 Controller根据V层指令检索M层数据并输出结果使得M与V分开)

        MTV(Model处理数据逻辑的模型 Template显示数据的模板层 View封装负责处理用户请求及返回响应的逻辑的视图函数)

// Django(Web开发框架)

+MVC: URLConf+视图函数  VC之间交互,C→M→V单向

+MTV: MV,TV各自之间交互

//环境 Python>=3.7 

设置pip源

Linux:待补充

Windows:C:\Users\我的用户名\AppData\Roaming\pip.ini先建txt再F2改ini

copy:

注意行末无空格

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn

备编译器 pycharm 分专业版、社区版

(一)

// 创建一个项目

pip install django

django-admin startproject my_dj_总之一个名字

cd my_dj
python manage.py

//setting.py

ALLOWED_HOSTS = ["*"] #任意用户均可访问,否则写入IP
INSTALLED_APPS = [] #插拔有对应存在的任意app
ROOT_URLCONF = #总路由
WSGI_APPLICATION =   #web服务网关
LANGUAGE_CODE = 'en-us'

#改成:

LANGUAGE_CODE = 'zh-hans'

#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
#DEBUG = True
DEBUG = False

// 项目启动

python .\manage.py runserver #启动服务器

#Starting development server at http://

#Quit the server with CTRL-BREAK.

(二)

//路由配置

// 为my_app创建urls.py 即创建子路由

from django.urls import path

urlpatterns = [
    path("hello/", ""),
]

//urls.py 回到总路由的urls.py在urlpatterns中写入新建的子路由

from django.urls import path, include # 加上include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('my_app/', include('my_app.urls')), # 这样添加新建的子路由
]

//子路由编写视图函数

//views.py

# request在Djongo的所有视图函数中都是必传参数,类似定义class的self

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

# Create your views here.
def hello(request):
    return HttpResponse("

Hello Django!

")

//子路由引用视图函数 子路由urls.py

from my_app.views import hello

urlpatterns = [
    path("hello/", hello),
]

//重启再运行项目

# 127.0.0.1:8000/my_app/hello/

//总结运行流程

# “ 根据项目配置文件ROOT_URLCONF找到总路由模块的路径”

# ”加载总路由文件,寻找urlpatterns变量,依次匹配URL,直到匹配到第一个路径,然后根据匹配# 的路径执行视图函数,或者也可以通过include函数加载子路由文件“

//启动开发服务器

1.本地端口号8000 开发者服务器

python manage.py runserver

2.本地端口号8888

python manage.py runserver 8888

3.任何主机都可以访问端口号8888的服务器

python manage.py runserver 0.0.0.0:8888

//另一种配置路由的方式 repath

// 子路由urls.py

from django.urls import path, re_path
urlpatterns = [
    path("hello/", hello),
    re_path(r"welcome/", welcome),
]

# re_path(r"^welcome/$", welcome)则仅限于“welcome/”,有前缀或后缀都不会再匹配到

// 子路由对应的views中应当添加有上述对应的函数welcome

def welcome(request):
    return HttpResponse("

huanyingxuexi欢迎学习!

")

(三)

URL动态传参

//子路由视图函数中写入一个需要传参的函数

def cars(request, name, power):
    return HttpResponse(f"

车名:{name}, 马力:{power}

") # 三级标题 format语法

//子路由urls中 补参

① path 的补参方式

#django中用<>补参 其中参数名称要与视图函数中的变量名设置相同 先后顺序不要求/位置参

from my_app.views import hello, welcome, cars
urlpatterns = [
    path("hello/", hello),
    re_path(r"welcome/", welcome),
    path("cars//", cars)
]

##运行项目时,项目的总路由即可通过语句path('my_app/', include('my_app.urls'))匹配到上述编##写的子路由、子路由写的函数

#即:视图函数的参由urls进行捕获

# 访问127.0.0.1:8000/my_app/cars/GTR/350

② repath 的补参方式。必要使用命名分组方式。必须添加字段限制。

urlpatterns = [
    path("hello/", hello),
    re_path(r"^welcome/$", welcome),
    # path("cars///", cars),
    re_path(r"cars/(?P[a-z]+)/(?P[0-9]+)/", cars),
]

(四)

路径转换器

#注意views中写入print(type(参数))是字符串(输出在terminal),做计算需转换类型

#路径转换器三类:①str 默认传入的参数②int 子路由中传参时int()转换③path包含一些特殊的符号

②:

//views中先写个add函数

def add(request, a, b):
    # print(type)
    return HttpResponse(f"

sum of the 2 num is {a + b}

")

//子路由传参

urlpatterns = [
    path("add///", add),
]

③:特殊内容-带分割符的路径文本

//views中先写个get_msg函数

def get_msg(request, msg):
    return HttpResponse(f"

content of received message is '{msg}'

")

//子路由传参

urlpatterns = [
path("msg//", get_msg)
]

#若传2参,第一path,第二默认,会把传入内容最后一个分割符以后的内容识别为第二个参数

#具体情况debug考虑调整传参顺序。当然这不是一个好的代码。

(五)

视图函数使用

上述的httpresponse;如下的render。如果前后端完全分开,通常不用这样的render返回html,而是以json形式返回。

render:

// 子路由同一层次路径创建templates,temp下再写一个he。html

// he.html




    
    hello


what

// 视图函数与子路由

from django.shortcuts import render
def go_he(request):
    return render(request, "he.html")
from my_app.views import go_he
urlpatterns = [
    path("go_he/", go_he),
]

你可能感兴趣的:(pycharm)