wordpress 5.0.2企业站主题,城乡和住房建设厅网站首页,编程培训机构找极客时间,营销型网站公司目录
一、Django环境搭建与命令
1.1、安装
1.2、命令行
创建项目
编写代码
运行
app概念
1.3、Pycharm创建项目
1.4、虚拟环境
创建虚拟环境 - 命令行
介绍
操作
基本问题
Pycharm
项目虚拟环境
django虚拟环境【安装django最新版本】
django虚拟环境【安装指…目录
一、Django环境搭建与命令
1.1、安装
1.2、命令行
创建项目
编写代码
运行
app概念
1.3、Pycharm创建项目
1.4、虚拟环境
创建虚拟环境 - 命令行
介绍
操作
基本问题
Pycharm
项目虚拟环境
django虚拟环境【安装django最新版本】
django虚拟环境【安装指定版本django】
1.5、关于创建app
二、路由
2.1、传统的路由
传参的几种方式
1restful风格
2问号传参
2.2、正则表达式路由
2.3、路由分发
include分发
手动分发
2.4、name属性
2.5、namespace
2.6、namespace扩展
namespace需要设置app_name
手动分发
2.7、最后的 / 如何解决
2.8、当前匹配对象 一、Django环境搭建与命令
1.1、安装
pip install django3.2
C:\Python39- python.exe- Scripts- pip.exe- django-admin.exe- Lib- re.py- random.py- site-pakages- django3.2... 1.2、命令行
创建项目
cd 指定目录
django-admin startproject 项目名 django_demo01
├── manage.py [项目的管理工具]
└── django_demo01├── __init__.py├── settings.py 【配置文件只有一部分。程序启动时先读取django内部配置再读settings.py】├── urls.py 【主路由在里面编写 /xxx/xxx/xxx --- index 】├── asgi.py 【异步】└── wsgi.py 【同步主】 编写代码
在urls.py中编写
from django.contrib import admin
from django.urls import pathfrom django.shortcuts import HttpResponsedef info(request):print(请求来执行了)return HttpResponse(xxxx)def xxxx(request):print(请求来执行了)return HttpResponse(。。。。。。)urlpatterns [# path(admin/, admin.site.urls),path(api/index/, info),path(api/show/, xxxx),
] 运行
cd 项目
python manage.py runserver
python manage.py runserver 127.0.0.1:8000
python manage.py runserver 127.0.0.1:9000 访问http://127.0.0.1:8000/api/index/ app概念
cd 项目
python manage.py startapp 名字
django_demo01
├── manage.py [项目的管理工具]
├── web├── __init__.py├── views.py [视图函数]├── models.py [ORM基于models可以对数据库进行简便的操作]...
└── django_demo01├── __init__.py├── settings.py 【配置文件只有一部分。程序启动时先读取django内部配置再读settings.py】├── urls.py 【主路由在里面编写 /xxx/xxx/xxx --- index 】├── asgi.py 【异步】└── wsgi.py 【同步主】
app的概念其实就是按业务分比如一个项目中支付功能一个app、订单功能一个app有点像Java里微服务的意思。 现在我们把刚才写的两个方法的代码放到web/views.py中 修改urls.py代码 启动项目 1.3、Pycharm创建项目 直接点击启动项目 1.4、虚拟环境
注意以后再创建项目时不要一直用系统解释器为每个项目虚拟环境 项目文件。 创建虚拟环境 - 命令行
介绍
venvPython官方用于创建虚拟环境的工具。
cd xxx/xxx/crm
python3.9 -m venv ddd
python3.7 -m venv xxxx
python3.7 -m venv /xxx/xxx/xxx/xx/ppp
virtualenv 【推荐】
pip install virtualenv
cd /xxx/xx/
virtualenv ddd --pythonpython3.9
virtualenv /xxx/xx/ddd --pythonpython3.7 操作
第一步pip安装virtualenv
pip install virtualenv 第二步在D:\study\python\envs创建虚拟环境
virtualenv crm --pythonpython3.9 注意crm是我们的虚拟环境名随便起。 第三步激活虚拟环境
cd D:\study\python\envs\crm\Scripts
activate 第四步虚拟环境中安装Django包
pip install django3.2 第五步创建django项目
cd D:\study\python\projects
django-admin startproject crm
注意这里的crm是项目名。 第六步退出虚拟环境
deactivate 基本问题
问题1如何删除虚拟环境
直接删文件夹即可。比如我们上面例子虚拟环境文件夹叫crm直接删除。 问题2使用virtualenv创建虚拟环境时Python3.9的系统环境可以创建Python3.7虚拟环境吗
不可以你系统环境Python是什么版本只能创建什么版本的虚拟环境。 Pycharm
项目虚拟环境 我的习惯一般在venv前面加上点默认让它隐藏。 django虚拟环境【安装django最新版本】 注意这种方式默认pip install django命令安装安装的是最新版本的django。 django虚拟环境【安装指定版本django】
第一步我们先创建普通Python项目 第二步打开终端输入安装3.2版本django命令
pip install django3.2 第三步在终端输入如下命令
django-admin startproject django_test01 . 第四步添加django服务 第五步启动django服务 1.5、关于创建app
第一步先安装指定版本的django项目 第二步项目下右键创建apps文件夹
注意apps文件夹里包括各种模块的文件。 第三步在apps文件夹下随便创建几个文件代表模块 第四步分别为模块创建app
在终端中分别输入
python manage.py startapp api apps/api
python manage.py startapp backend apps/backend
python manage.py startapp web apps/web 第五步修改这三个模块apps文件里的name属性 这就是一个完整的django多app应用结构了。 二、路由
2.1、传统的路由
urls.py
from django.contrib import admin
from django.urls import path
from apps.web import viewsurlpatterns [path(home/, views.home),path(news/int:nid/edit/, views.news),path(article/, views.article),
]
path()第一个参数是我们需要在浏览器访问的url地址第二个参数是函数名。 views.py
from django.shortcuts import render, HttpResponsedef home(request):return HttpResponse(成功)def news(request, nid):print(nid)page request.GET.get(page)return HttpResponse(新闻)def article(request):nid request.GET.get(nid)print(nid)return HttpResponse(文章) 传参的几种方式
1restful风格
urlpatterns [path(news/int:nid/edit/, views.news)
]
def news(request, nid):print(nid) # 接收参数return HttpResponse(新闻) int整数 str字符串 / slug字母数字下滑线- uuiduuid格式 path路径可以包含 /
注意字符串你可以输入任何东西比如aaabbb这种但slug有等号就会报错因为slug只能包含字母数字下划线。 2问号传参
urlpatterns [path(article/, views.article)
]
def article(request):nid request.GET.get(nid) # 接收参数print(nid)return HttpResponse(文章) 2.2、正则表达式路由 在django1版本用的多。 在django2版本用的少 2.3、路由分发
include分发
假如200个功能。
include app一般将功能拆分不到不同的app中。 第一步在三个app模块中分别创建自己的urls.py文件 第二步对api模块进行操作
views.py
from django.shortcuts import render,HttpResponsedef getApiName(request):return HttpResponse(编程抗氧化——api)
urls.py
urlpatterns [path(getApiName/, views.getApiName),
] 第三步对web模块进行操作
views.py
from django.shortcuts import render, HttpResponsedef getWebName(request):return HttpResponse(编程抗氧化——web)
urls.py
urlpatterns [path(getWebName/, views.getWebName),
] 第四步在主urls.py中编码引入其它模块的urls
from django.contrib import admin
from django.urls import path,includeurlpatterns [path(api/, include(apps.api.urls)),path(web/, include(apps.web.urls)),
]第五步测试 当我们路径带有api或者web自动匹配到主urls.py然后找对应的include为我们分发到下面子模块的urls.py中。 手动分发
有时候我们可能项目没那么多功能也就用不着创建多个app模块假如说我们现在就一个模块有用户的增删改查、角色的增删改查、菜单的增删改查等等... 那么urls.py就得是这样的
path(user/add/, views.userAdd),
path(user/delete/, views.userDelete),
path(user/edit/, views.userEdit),
path(user/list/, views.userList),path(role/add/, views.roleAdd),
path(role/delete/, views.roleDelete),
path(role/edit/, views.roleEdit),
path(role/list/, views.roleList),path(menu/add/, views.menuAdd),
path(menu/delete/, views.menuDelete),
path(menu/edit/, views.menuEdit),
path(menu/list/, views.menuList),
看起来很冗杂而且好多路径都是重复的那么我们可以使用手动分发的方式去处理这种情况
path(user/, ([path(add/, views.userAdd),path(delete/, views.userDelete),path(edit/, views.userEdit),path(list/, views.userList),], None, None)),path(role/, ([path(add/, views.roleAdd),path(delete/, views.roleDelete),path(edit/, views.roleEdit),path(list/, views.roleList),], None, None)),path(menu/, ([path(add/, views.menuAdd),path(delete/, views.menuDelete),path(edit/, views.menuEdit),path(list/, views.menuList),], None, None)),
这样看起来是不是就轻松多了。 2.4、name属性
给一个路由起个名字 根据名字反向生成URL。
from django.contrib import admin
from django.urls import path
from django_test01 import views# 很多功能很多URL
urlpatterns [path(login/, views.login, namev1),path(auth/, views.auth, namev2),
]
其实就是起个名字。
有了名字后以后一般有两处会用到
1在视图函数中生成URL
比如我有一个需求浏览器访问/login在login方法中再跳转到auth方法这时我们的做法是
urls.py
from django.contrib import admin
from django.urls import path
from django_test01 import views# 很多功能很多URL
urlpatterns [path(login/, views.login, namev1),path(auth/, views.auth, namev2),
]
views.py
from django.shortcuts import render, HttpResponse, redirectdef auth(request):return HttpResponse(auth)def login(request):return redirect(/auth/) # 重定向到/auth当我们访问http://localhost:8000/login 时调用了auth方法。 那么说了这么多name的作用在哪呢别急这就告诉你...
我们可以将上面views.py的代码改为
from django.shortcuts import render, HttpResponse, redirectdef auth(request):return HttpResponse(auth)def login(request):from django.urls import reverseurl reverse(v2) # /auth/return redirect(url)
我们可以通过reverse方法来获得namev2的url路径这样写法就灵活多了。 2HTML模板页面上有一个a标签添加xx
a href{% url v1 %}添加/a
a href{% url v2 %}添加/a 2.5、namespace
辅助name。
主路由
from django.urls import path, re_path, include# 很多功能很多URL
urlpatterns [path(api/, include(apps.api.urls,namespacex1)),path(web/, include(apps.web.urls,namespacex2)),
]
api/urls.py
from django.urls import path, re_path
from . import views
# 很多功能很多URL
urlpatterns [path(login/, views.login,namelogin),path(auth/, views.auth, nameauth),
]
web/urls.py
from django.urls import path, re_path
from . import views
# 很多功能很多URL
urlpatterns [path(home/, views.home,namehome),path(order/, views.order,nameorder),path(auth/, views.order, nameauth),
]
以后再某个URL或者视图中反向生成
from django.urls import reverse
url reverse(x1:login) # /api/login/
url reverse(x1:order) # /web/login/url reverse(x1:auth) # /api/login/
url reverse(x2:auth) # /web/login/ 2.6、namespace扩展
namespace需要设置app_name
主路由
urlpatterns [path(api/, include(apps.api.urls, namespacex1)),
]
api/urls.py
from django.urls import path, re_path
from apps.api import views# 很多功能很多URL
urlpatterns [path(login/, views.login, namelogin),path(auth/, views.auth, nameauth),
]app_name api 手动分发 2.7、最后的 / 如何解决
当在settings.py中设置 APPEND_SLASH True
path(login/, views.login),http://127.0.0.1:8000/login/ 成功http://127.0.0.1:8000/login django重定向301http://127.0.0.1:8000/login/ 成功
当我们访问http://127.0.0.1:8000/login/ 直接访问成功这不多说
但当我们访问http://127.0.0.1:8000/login 发现django会自动为我们补上最后一个斜杠这是因为请求第一次没带斜杠django会为我们重定向到带斜杠的路径。
path(login, views.login),http://127.0.0.1:8000/login 成功http://127.0.0.1:8000/login http://127.0.0.1:8000/login/ 失败 APPEND_SLASH False
path(login/, views.login),http://127.0.0.1:8000/login/ 成功http://127.0.0.1:8000/login 失败
path(login, views.login),http://127.0.0.1:8000/login/ 失败http://127.0.0.1:8000/login 成功
设置了falsedjango不会自动为你加斜杠该是什么就是什么。 2.8、当前匹配对象 有什么用呀
某用户具有一些权限。 permissions [xx,login,account]
某用户具有一些权限。 permissions [login,account]