首页 技术 正文
技术 2022年11月18日
0 收藏 896 点赞 2,390 浏览 11209 个字

虚拟环境

什么是虚拟环境

对真实的python解释器的一个拷贝版本是事实有效的,可以独立存在运行解释python代码可以在计算机上拷贝多个虚拟环境

为什么要使用虚拟环境

保证真实环境的纯净性框架的多版本共存方便做框架的版本迭代降低多框架共存的维护成本

安装虚拟环境

1.通过pip3安装虚拟环境:  -- pip3 install virtualenv2.前往目标文件夹:  -- cd 目标文件夹 (D:\Virtualenv)3.创建纯净虚拟环境:  -- virtualenv 虚拟环境名 (py3-env1)4.终端启动虚拟环境:  -- cd py3-env1\Scripts  -- activate5.进入虚拟环境下的python开发环境  -- python36.关闭虚拟环境:  -- deactivate7.PyCharm的开发配置  添加:创建项目 -> Project Interpreter -> Existing interpreter -> Virtualenv Environment | System Interpreter -> 目标路径下的python.exe  删除:Setting -> Project -> Project Interpreter -> Show All

web架构

web应用 架构

C/S 架构 | B/S 架构client server: 客户端服务器架构,C++browser server:浏览器服务器架构,Java、Python

原生socket

完成B/S架构项目的设计

Borwser已经完成
Server需要手动书写socket,以http协议方式完成响应

import socket# 设置响应头(包含响应行)RESP_HEADER = b'HTTP/1.1 200 OK\r\nContent-type:text/html;charset=utf-8\r\n\r\n'# 设置服务器socket相关信息server = socket.socket()server.bind(('localhost', 8808))server.listen(5)print("服务: http://localhost:8808")while True:  # 获取B以http协议发来的请求  client, address = server.accept()  data = client.recv(1024)  # 数据报文 包含 请求行 请求头 请求体  print(data)  # 手动以http协议完成响应  # 数据报文 包含 响应行 响应头 响应体  client.send(RESP_HEADER)# /index => 响应主页# /login => 登录页面# 错误 => 404  # 数据data, 字节形式 => 字符串形式  strData = str(data, encoding='utf-8')  # 解析请求的数据, 分析得到路由  my_route = strData.split('\r\n')[0].split(' ')[1]  # 后台没有设置的路由,统统以404来处理  dt = b'404'  # 设置的路由返回响应的页面文件  if my_route == '/index':    with open('02_index.html', 'rb') as f:    dt = f.read()  if my_route == '/login':    with open('02_login.html', 'rb') as f:    dt = f.read()  # /favicon.ico该请求是往后台请求标签图标  if my_route == '/favicon.ico':    with open('favicon.ico', 'rb') as f:    dt = f.read()  # 响应体  client.send(dt)  # 一次循环,代表一次响应,也就是一次事务的完成, 要关闭http请求连接  client.close()

Django环境安装

安装python3.6版本:官网下载python3.6安装包,安装本地,并配置环境变量安装Django1.11.9版本:官网查看Django个版本特性

终端安装Django

安装命令:pip3 install django==1.11.9查看版本:django-admin --version

pycharm可视化安装

项目设置下Project Interpreter下为python3.6版本安装搜索Django包,并选取对应版本号

创建项目

终端创建

1、指定目录下:cd 目标路径2、创建django项目:django-admin startproject 项目名3、进入项目目录:cd 项目名4、启动项目:python3 manage.py runserver 127.0.0.1:80005、停止项目:Ctrl + c

pycharm创建(略)

项目目录

-- __init__.py:模块的配置文件,将blog_proj文件夹变成了模块-- settings.py:配置总文件-- urls.py:url配置文件,django项目中的所有页面都需要对其配置url地址-- wsgi.py:(web server gateway interface),服务器网关接口,python应用与web服务器直接通信的接口templates:模板文件夹,存放html文件的(页面),支持使用Django模板语言(DTL),也可以使用第三方(jinja2)manage.py:项目管理器,与项目交互的命令行工具集的入口,查看支持的所有命令python3 manage.py

分析settings.py

import os# 项目根目录BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 项目安全码SECRET_KEY = 'guwba1u$18=&*8kf44_u&swqb@xlwgel7n$0rs=(+f10yvz)p0'# 调试模式,上线项目要关闭debug模式,不然后台出现异常会直接抛给前台展现给用户看了DEBUG = True# 在上线项目中,规定只能以什么ip地址来访问django项目# DEBUG = FALSE# ALLOWED_HOSTS = ['localhost']ALLOWED_HOSTS = []# 项目自带的应用# 我们创建了自己的应用就要将自定义应用添加到该配置INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',]# 中间件# django自带的工具集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',]# 配置url配件文件的根文件,执行urls.pyROOT_URLCONF = '项目目录.urls'# 模板,一个个html文件TEMPLATES = [{# 如果使用第三方,可以在这个地方修改模板引擎'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'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 = '项目目录.wsgi.application'# 数据库配置# 要配置自定义数据库去下面链接去查询详细配置# https://docs.djangoproject.com/en/1.11/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}}# 密码认证配置# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},]# 国际化相关配置# https://docs.djangoproject.com/en/1.11/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# 静态文件地址 (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/1.11/howto/static-files/STATIC_URL = '/static/'```

创建项目应用

方法一 终端创建app

1、项目目录下创建应用:python3 manage.py startapp app
2、添加应用名到settings.py的INSTALLED_APPS中

INSTALLED_APPS = ['django.contrib.admin',...'django.contrib.staticfiles',# 添加的自定义应用'app',]```

方法二 在pycharm创建项目时创建app,系统会帮我们自动添加到配置中

方法三 在manage命令行中创建app

Django框架 (一) 虚拟环境配置及简单使用

应用目录

migrations:数据迁移(移植)模块,内容都是由Django自动生成-- __init__.py__init__.pyadmin.py:应用的后台管理系统配置apps.py:django 1.9后,本应用的相关配置models.py:数据模型模块,使用ORM框架,类似于MVC模式下的Model层tests.py:自动化测试模块,可以写自动化测试脚本views.py:执行相应的逻辑代码模块(相应什么,如何相应),代码逻辑处理的主要地点,项目的大部分代码所在位置

第一个响应

app下的views.py文件

# 导入处理请求的 http相应功能from django.http import HttpResponse# django中每一个请求都有一个函数来处理# 函数的参数约定requestdef index(request):# 简单相应一个字符串return HttpResponse('index page!')

项目目录下的urls.py文件

from django.conf.urls import urlfrom django.contrib import admin# 导入应用视图import app.views as app_viewurlpatterns = [url(r'^admin/', admin.site.urls),# 为指定相应函数配置urlurl(r'^index/$', app_view.index),]

第一个模板页面

项目下的templates文件夹用于存放模板页面,在该文件夹中新建index.html

from django.shortcuts import renderdef index(request):  # 参数:请求对象request, 模板html文件, 传给前台的数据  return render(request, 'index.html')

模板路径配置(srttings.py)解读

TEMPLATES = [{# 如果使用第三方,可以在这个地方修改模板引擎'BACKEND': 'django.template.backends.django.DjangoTemplates',# 模板页面默认路径:项目根路径下的templates文件夹'DIRS': [os.path.join(BASE_DIR, 'templates')],# 允许所有app均拥有自己的模板文件夹'APP_DIRS': True,...},]```

第一个重定向

在app下的views.py文件配置响应函数

from django.shortcuts import render, redirect# / 路径渲染index.html页面def home(request):  return render(request, 'index.html')# /index/ 路径重定向到 / 路径,达到渲染index.html页面def index(request):  return redirect('/')

在项目目录下的urls.py文件配置 / 路径

from django.conf.urls import urlfrom django.contrib import admin# 导入应用视图import app.views as app_viewurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^index/$', app_view.index),url(r'^$', app_view.home),]

url应用移植

项目目录下的urls.py文件

# 导入include功能,将url配置转移到指定应用内部的自身url配置文件from django.conf.urls import url, includefrom django.contrib import adminurlpatterns = [url(r'^admin/', admin.site.urls),# 将url配置操作交给app_test自身的urls.py来进行操作# app-test/为app_test应用的总路径url(r'^app-test/', include('app_test.urls')),]

app_test下的urls.py文件

from django.conf.urls import urlfrom . import viewsurlpatterns = [# 1.不要直接留空,直接留空 http://localhost:8000/app-test/* 均可以访问# 2.如果要配置index,访问的地址为 http://localhost:8000/app-test/index# 3.配置方式:r'^index/$',不要省略 / 符号# 4.正则是否以$标识结尾取决于该路径是否会有下一级路径url(r'^$', views.index),]

多应用相同模板页面冲突

app和app_test两个应用均有模板页面index.html1.在应用templates文件夹下建立与应用同名的文件夹,eg:app_text下就建立app_text2.将模板创建在与应用同名的模板文件夹下3.修改指定应用下views.py处理请求的render模板指向def index(request):  # 模板指向:blog_app应用的templates下的blog_app文件夹中的index.html  return render(request, 'app_text/index.html') 注: 两种同时存在时, 项目下templates优先被访问

静态资源的配置

静态文件的根路由 => 规定了加载静态文件的起点

settings文件下的

STATIC_URL = '/static/'# 下方规定静态文件可以放入的文件夹STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),os.path.join(BASE_DIR, 'a'),os.path.join(BASE_DIR, 'b'),]

直接导致模板页面导入静态文件起点:

<link src="/static/index.css">   #无需带上文件夹名字,Django会自动去找那个文件

查找方式

通过/static/匹配到静态文件的根路由 => 根路由管理着static | a | b 三个存放在项目根目录下的文件夹 => 三个文件夹中任意一个存放着index.css即可

url正则解读

原生字符串

urls.py配置路由

url(r'test', app_view.test)

views.py设置响应函数

def test(request):  return HttpResponse('test')

产生问题:请求地址包含test均可以访问

http://127.0.0.1:8000/test => /test | /atest | /testa | /atesta | /test/a | /test/

限制开头

urls.py配置路由url(r'^test', app_view.test)views.py设置响应函数def test(request):  return HttpResponse('test')

问题:请求地址以test开头均可以访问

http://127.0.0.1:8000/test => /test | /testa | /test/a | /test/

再限制结尾

urls.py配置路由url(r'^test$', app_view.test)views.py设置响应函数def test(request):    return HttpResponse('test')

问题:只能一种方式访问

http://127.0.0.1:8000/test => /test不能以 /test/ 访问# http://127.0.0.1:8000/test/

优化结尾

urls.py配置路由url(r'^test/$', app_view.test)views.py设置响应函数def test(request):  return HttpResponse('test')# /test 和 /test/ 均可以访问# http://127.0.0.1:8000/test# http://127.0.0.1:8000/test/

问题:不能作为应用总路由

eg:app_test应用在项目urls.pyurl(r'^app-test/', include('app_test.urls')) 末尾不能加$,因为作为应用总目录,是有下一级,如果用$标识结尾了,就代表不能有下一级路由

地址捕获

# urls.py配置路由
url(r’^test/(\d+)/\d+/(\d+)/$’, app_view.test)

# 对应请求路径
# http://127.0.0.1:8000/test/1/22/333/

# 对应响应函数
def test(request, arg1, arg2):
# arg1: str 1
# arg2: str 333
return HttpResponse(‘test’)

小结

常规路由配置 r'^index/$' r'^page/2/$'应用路由配置r'^app/'根路由配置 r'^$'路由配置均以 / 结尾()中的字段会被请求响应函数捕获限制响应函数捕获的变量名(?P<num>[0-9]+) 响应函数参数(requset, num)

DTL前后台数据通信

DTL概念

Django模板语言(Django Template Language)

响应函数传输数据给前端页面

views.py

from django.shortcuts import renderdef index(request):dic_data = {'key1': value1, 'key2': value2}return render(request, 'index.html', dic_data)

<!– index.html –>

<body>{{ key1 }}{{ key2 }}</body>

前端页面传输数据给响应函数

<!-- index.html --><body><a href="{% url 'run_action' 1 %}" rel="external nofollow" >run 1</a><a href="{% url 'run_action' 2 %}" rel="external nofollow" >run 2</a></body>

views.py

from django.http import HttpResponsedef run(request, num):if num == '1':return HttpResponse('run 1')if num == '2':return HttpResponse('run 2')return HttpResponse('404')

# urls.py
url(r’^run/(?P<num>[0-9]+)/$’, run, name=’run_action’)
“`

– 拓展

# 针对发生url转移的应用
# 项目urls.py
url(r’^app_test/’, include(‘app_test.urls’, namespace=’app_test’))
# 应用urls.py
url(r’^index/$’, index, name=’index’)
# 模板语法
<a href=”{% url ‘app_test:index’ %}”>test app index</a>

form表单提交数据

配置登录页面

urls.py配置路由url(r'^login/$', login, name='login')# templates下新建login.html页面# views.py设置响应函数def login(request):  pass

前端login.html页面

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>登录</title><link rel="stylesheet" href="/static/dist/css/bootstrap.css" rel="external nofollow" ><link rel="stylesheet" href="/static/css/login.css" rel="external nofollow" ></head><body><div class="container"><!-- hint:1 --><form action="{% url 'login' %}" method="post" class="col-md-6 col-md-offset-3"><!-- hint:2 -->{% csrf_token %}<div class="form-group"><label for="usr">用户名:</label><input class="form-control" type="text" id="usr" name="usr" placeholder="请输入用户名"></div><div class="form-group"><label for="pw">密码:</label><input class="form-control" type="password" id="pw" name="pw" placeholder="请输入密码"></div><div class="form-group"><label class="checkbox-inline"><input name="hobbies" type="checkbox" id="inlineCheckbox1" value="basketball"> 篮球</label><label class="checkbox-inline"><input name="hobbies" type="checkbox" id="inlineCheckbox2" value="football"> 足球</label><label class="checkbox-inline"><input name="hobbies" type="checkbox" id="inlineCheckbox3" value="ping-pong"> 乒乓球</label></div><button type="submit" class="btn btn-info col-md-12">登录</button></form></div></body></html><!-- hint:1 --><!-- action参数值:不填(向当前路径提交请求) | http://127.0.0.1:8000/login/ | /login/ | {% url 路由名 %} --><!-- hint:2 --><!-- 表单做提交需要做token的安全验证,也可以注释settings.py中间件:'django.middleware.csrf.CsrfViewMiddleware' -->

后台响应函数

def login(request):if request.method == 'GET':usr = request.GET.get('usr', 'USR')print(usr)ps = request.GET.get('ps', 'PS')print(ps)hobbies = request.GET.getlist('hobbies', 'HOBBIES')print(hobbies)elif request.method == 'POST':print(request.POST)usr = request.POST.get('usr', 'USR')print(usr)ps = request.POST.get('ps', 'PS')print(ps)hobbies = request.POST.getlist('hobbies', 'HOBBIES')print(hobbies)return render(request, 'login.html')# request.GET和request.POST:均为django.http.request.QueryDict类型(非元素类型)# .get('usr', 'USR'):第一次参数为前台提交字段的key,第二个参数为如果取不到值用默认值填充

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898