Django从入门到精通(一)

这篇具有很好参考价值的文章主要介绍了Django从入门到精通(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Django环境搭建与命令

1.1、安装

1.2、命令行

创建项目

编写代码

运行

app概念

1.3、Pycharm创建项目

1.4、虚拟环境

创建虚拟环境 - 命令行

介绍

操作

基本问题

Pycharm

项目+虚拟环境

django+虚拟环境【安装django最新版本】

django+虚拟环境【安装指定版本django】

1.5、关于创建app

二、路由

2.1、传统的路由

传参的几种方式

(1)restful风格

(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 django==3.2
C:\Python39
	- python.exe
	- Scripts
		- pip.exe
		- django-admin.exe
	- Lib
		- re.py
		- random.py
		- site-pakages
			- django==3.2
			  ...

1.2、命令行

创建项目

cd 指定目录
django-admin startproject 项目名

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

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 path

from django.shortcuts import HttpResponse

def 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

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

访问http://127.0.0.1:8000/api/index/

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

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里微服务的意思。

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

现在我们把刚才写的两个方法的代码放到web/views.py中:

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

修改urls.py代码:

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

启动项目:

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

1.3、Pycharm创建项目

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

直接点击启动项目:

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

1.4、虚拟环境

注意:以后再创建项目时,不要一直用系统解释器,为每个项目:虚拟环境 + 项目文件。

创建虚拟环境 - 命令行

介绍
  • venv,Python官方用于创建虚拟环境的工具。
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 --python=python3.9
virtualenv /xxx/xx/ddd --python=python3.7
操作

第一步:pip安装virtualenv

pip install virtualenv

第二步:在D:\study\python\envs创建虚拟环境

virtualenv crm --python=python3.9

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

注意:crm是我们的虚拟环境名,随便起。

第三步:激活虚拟环境

cd D:\study\python\envs\crm\Scripts
activate

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第四步:虚拟环境中安装Django包

pip install django==3.2

第五步:创建django项目

cd D:\study\python\projects
django-admin startproject crm

注意:这里的crm是项目名。

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第六步:退出虚拟环境

deactivate

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

基本问题

问题1:如何删除虚拟环境?

直接删文件夹即可。比如我们上面例子虚拟环境文件夹叫crm,直接删除。

问题2:使用virtualenv创建虚拟环境时,Python3.9的系统环境可以创建Python3.7虚拟环境吗?

不可以,你系统环境Python是什么版本只能创建什么版本的虚拟环境。

Pycharm

项目+虚拟环境

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

我的习惯一般在venv前面加上点,默认让它隐藏。

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

django+虚拟环境【安装django最新版本】

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

注意:这种方式默认pip install django命令安装,安装的是最新版本的django。

django+虚拟环境【安装指定版本django】

第一步:我们先创建普通Python项目

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第二步:打开终端,输入安装3.2版本django命令

pip install django==3.2

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第三步:在终端输入如下命令

django-admin startproject django_test01 .

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第四步:添加django服务

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第五步:启动django服务

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

1.5、关于创建app

第一步:先安装指定版本的django项目

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第二步:项目下右键创建apps文件夹

注意:apps文件夹里包括各种模块的文件。

第三步:在apps文件夹下随便创建几个文件代表模块

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第四步:分别为模块创建app

在终端中分别输入:

python manage.py startapp api apps/api
python manage.py startapp backend apps/backend
python manage.py startapp web apps/web

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第五步:修改这三个模块apps文件里的name属性

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

这就是一个完整的django多app应用结构了。

二、路由

2.1、传统的路由

urls.py

from django.contrib import admin
from django.urls import path
from apps.web import views

urlpatterns = [
    path('home/', views.home),
    path('news/<int:nid>/edit/', views.news),
    path('article/', views.article),
]

path()第一个参数是我们需要在浏览器访问的url地址,第二个参数是函数名。

views.py

from django.shortcuts import render, HttpResponse


def 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("文章")

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

传参的几种方式

(1)restful风格
urlpatterns = [
    path('news/<int:nid>/edit/', views.news)
]
def news(request, nid):
    print(nid) # 接收参数
    return HttpResponse("新闻")

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

  • int,整数

  • str,字符串 /

  • slug,字母+数字+下滑线+-

  • uuid,uuid格式

  • path,路径,可以包含 /

注意:字符串你可以输入任何东西,比如aaa=bbb这种,但slug有等号就会报错,因为slug只能包含字母数字下划线。

(2)问号传参
urlpatterns = [
    path('article/', views.article)
]
def article(request):
    nid = request.GET.get("nid") # 接收参数
    print(nid)
    return HttpResponse("文章")

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

2.2、正则表达式路由

  • 在django1版本用的多。

  • 在django2+版本用的少

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

2.3、路由分发

include分发

假如:200个功能。

include + app(一般),将功能拆分不到不同的app中。

第一步:在三个app模块中分别创建自己的urls.py文件

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

第二步:对api模块进行操作

views.py

from django.shortcuts import render,HttpResponse

def getApiName(request):
    return HttpResponse("编程抗氧化——api")

urls.py

urlpatterns = [
    path('getApiName/', views.getApiName),
]

第三步:对web模块进行操作

views.py

from django.shortcuts import render, HttpResponse


def 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,include

urlpatterns = [
    path('api/', include("apps.api.urls")),
    path('web/', include("apps.web.urls")),
]

第五步:测试

Django从入门到精通(一),# Django,django,python,后端,路由,pycharmDjango从入门到精通(一),# Django,django,python,后端,路由,pycharm

当我们路径带有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, name="v1"),
    path('auth/', views.auth, name="v2"),
]

其实就是起个名字。

有了名字后,以后一般有两处会用到:

(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, name="v1"),
    path('auth/', views.auth, name="v2"),
]

views.py

from django.shortcuts import render, HttpResponse, redirect

def auth(request):
    return HttpResponse("auth")


def login(request):
    return redirect("/auth/") # 重定向到/auth

当我们访问http://localhost:8000/login 时调用了auth方法。

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

那么说了这么多,name的作用在哪呢?别急,这就告诉你...

我们可以将上面views.py的代码改为:

from django.shortcuts import render, HttpResponse, redirect

def auth(request):
    return HttpResponse("auth")


def login(request):
    from django.urls import reverse
    url = reverse("v2")  # /auth/
    return redirect(url)

我们可以通过reverse方法来获得name="v2"的url路径,这样写法就灵活多了。

(2)HTML模板,页面上有一个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",namespace='x1')),
    path('web/', include("apps.web.urls",namespace='x2')),
]

api/urls.py

from django.urls import path, re_path
from . import views
# 很多功能,很多URL
urlpatterns = [
    path('login/', views.login,name="login"),
    path('auth/', views.auth, name='auth'),
]

web/urls.py

from django.urls import path, re_path
from . import views
# 很多功能,很多URL
urlpatterns = [
    path('home/', views.home,name='home'),
    path('order/', views.order,name='order'),
    path('auth/', views.order, name='auth'),
]

以后再某个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", namespace='x1')),
]

api/urls.py

from django.urls import path, re_path
from apps.api import views

# 很多功能,很多URL
urlpatterns = [
    path('login/', views.login, name="login"),
    path('auth/', views.auth, name='auth'),
]

app_name = "api"

手动分发

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

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,重定向301
	http://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    成功

设置了false,django不会自动为你加斜杠,该是什么就是什么。

2.8、当前匹配对象

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm

有什么用呀?

某用户,具有一些权限。   permissions = ["xx","login",'account']
某用户,具有一些权限。   permissions = ["login",'account']

Django从入门到精通(一),# Django,django,python,后端,路由,pycharm文章来源地址https://www.toymoban.com/news/detail-810775.html

到了这里,关于Django从入门到精通(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django框架入门到精通(01)Django概要 (黄菊华老师大学生毕业设计学习教程)

    博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(31)
  • Django框架入门到精通(05)Django视图 (黄菊华老师大学生毕业设计学习教程)

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(35)
  • Django基础入门⑨:Django路由Path方法

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 path()方法 pat

    2024年02月11日
    浏览(32)
  • python的安装,Django的安装,Pycharm新建Django项目

    官网:https://www.python.org 官网–downloads–windows–选择对应的版本下载.exe文件 双击运行下载的安装包,按步骤进行安装 ①选择安装方式 install now,会直接默认安装到C盘中; customize installation,自定义安装,可以自行选择安装的位置 PS:无论选择哪种方式,都要记得勾选最底下

    2024年02月21日
    浏览(35)
  • Django框架入门到精通(04)Django创建第一个项目 (黄菊华老师大学生毕业设计学习教程)

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月06日
    浏览(40)
  • Datawhale Django后端开发入门Task01 Vscode配置环境

    首先呢放一张运行成功的截图纪念一下,感谢众多小伙伴的帮助呀,之前没有配置这方面的经验 ,但还是一步一步配置成功了,所以在此以一个纯小白的经验分享如何配置成功。 1.选择要建立项目的文件夹,打开文件找到目标文件夹   如上图所示,我这里是自己选择的命名

    2024年02月13日
    浏览(28)
  • Datawhale Django 后端开发入门 Task05 DefaultRouter、自定义函数

    一、DefaultRouter 是Django REST framework中提供的一个路由器类,用于自动生成URL路由。路由器是将URL与视图函数或视图集关联起来的一种机制。Django REST framework的路由器通过简单的配置可以自动生成标准的URL路由,从而减少了手动编写URL路由的工作量。 1. 使用方法 导入DefaultRout

    2024年02月12日
    浏览(35)
  • Django框架入门到精通(03)Django MTV和MVC的区别 (黄菊华老师大学生毕业设计学习教程)

    博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(38)
  • python网上选课系统django-PyCharm

    学生选课信息管理系统,可以有效的对学生选课信息、学生个人信息、教师个人信息等等进行管理。   开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql   数据库工具:Navicat11 开发软件:PyCharm  将大学四年所学与实际应用相结合,制作出一个完整的学生选课系

    2023年04月09日
    浏览(27)
  • Django新手必看:从入门到精通Web应用开发①【文末送书三本】

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 Django 是使用 Python 语言开发的

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包