第四章 python Django URL与视图

URL与视图

  • URL与视图
    • 一、第一个Django项目
      • 1. 创建 Django 项目
      • 2. 运行Django项目
    • 二、第一个项目笔记
      • 1. 创建项目
      • 2. 运行项目
      • 3. 改变端口号
      • 4. 让同局域网中的其他电脑访问本机的项目
      • 5. 项目结构分析
    • 三、视图与URL分发器
      • 1. 视图
      • 2. url映射
      • 3. url添加参数:
      • 4. urls中的函数
        • (1)path函数
        • (2)re_path函数
        • (3)include函数
    • 四、URL命名和反转
      • 1. 登录判断
      • 2. 登录命名修改(url反转)
      • 3. url命名
      • 4. 应用命名空间

URL与视图

一、第一个Django项目

1. 创建 Django 项目

路径:E:\Python3.8.0\python_item\python_diango\chapter02\first_project1
lsvirtualenv:查看虚拟环境
workon django-env:进入Django-env虚拟环境
pip list:查看模块
pip install Django(python -m pip install Django):安装Django
pip install Django -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --trusted-host pypi.douban.com
cd E:\Python3.8.0\python_item\python_diango
dir:目录
cd chapter02
dir
django-admin startproject first_project:创建项目
python manage.py startapp book:创建项目

用命令行的方式:

1.创建项目:
打开终端,使用命令: django-admin startproject [项目名称] 即可创建。
比如: django-admin startproject first_project 。

2.创建应用(app):
一个项目类似于是一个架子,但是真正起作用的还是 app 。在终端进入到项目所在的路径,然后执行 python manage.py startapp [app名称] 创建一个app。

【Sublime:软件】
python manage.py runserver:运行python
http://127.0.0.1:8000:前端

用 pycharm 的方式:
用 pycharm 新建一个 Django 项目,新建项目的截图如下:
第四章 python Django URL与视图_第1张图片
使用 pycharm 创建完项目后,还是需要重新进入到命令行单独创建 app 的。

python manage.py runserver:运行python
http://127.0.0.1:8000:前端

2. 运行Django项目

python manage.py runserver:运行python
http://127.0.0.1:8000:前端

修改端口号:python manage.py runserver 9000
http://127.0.0.1:9000

其他电脑上访问本网站:
指定 ip 地址为 0.0.0.0
示例为: python manage.py runserver 0.0.0.0:8000

二、第一个项目笔记

1. 创建项目

  1. 通过命令行的方式:首先要进入到安装了django的虚拟环境中。然后执行命令:
'''
django-admin startproject [项目的名称]
'''

这样就可以在当前目录下创建一个项目了。

  1. 通过pycharm的方式:文件 - > 新建项目 - > 选择django,然后指定项目所在的路径,以及pycharm解释器,再点击Create就可以创建项目了。

2. 运行项目

  1. 终端:进入到项目文件夹中,然后执行以下命令即可运行:
'''
python manage,py runserver
'''
  1. pycharm:直接点击右上角的绿色三角箭头按钮就可以了。

注意:用pycharm运行项目,要避免一个项目运行多次。
在项目配置中,把“只用单一实例”那个选项勾选上,避免以上的问题。

3. 改变端口号

  1. 在终端:运行的时候加上一个端口号就可以了。
    命令为:python manage.py runserver 9000
  2. 在pycharm中:右上角 - > 项目配置 - > port。改成你想要的端口号,重新运行。

4. 让同局域网中的其他电脑访问本机的项目

  1. 让项目运行的时候,host为0.0.0.0。
  • 在终端,使用命令:python manage.py runserver 0.0.0.0:8000.
  • 在pycharm,右上角 - > 项目配置 - > host。改为“0.0.0.0”
  1. 在“settings.py”文件中,配置“ALLOWED_HOSTS”,
    将本机的ip地址添加进去,实例代码如下:
'''
python
ALLOWED_HOSTS = ['92.168.2.102']
'''

注意:要关闭自己电脑的防火墙才行。

5. 项目结构分析

1. manage.py
以后和项目交互基本上都是基于这个文件。一般都是在终端输入 python manage.py [子命令]。可以输入 python manage.py help 看下能做什么事情。除非你知道你自己在做什么,一般情况下不应该编辑这个文件。

2. settings.py
保存项目所有的配置信息

3. urls.py
用来做url与视图函数映射的。以后来了一个请求,就会从这个文件中找到匹配的视图函数

4. wsig.py
专门用来做部署的,不需要修改。

三、视图与URL分发器

文件地址:
E:\Python3.8.0\python_item\python_diango\chapter02\1view_func_demo1

1. 视图

(1)视图函数的第一个参数必须是request,这个参数绝对不能少。
(2)视图函数的返回值必须是django.http.response.HttpResponseBase

from django.http import HttpResponse 
def book_list(request):
	return HttpResponse("书籍列表!")

2. url映射

(1)为什么会去urls.py文件中寻找映射呢?
是因为在settings.py文件中配置了ROOT_URLCONFurls.py。所有django会去urls.py中寻找。

ROOT_URLCONF = 'view_func_demo1.urls'

(2)在urls.py中我们所有的映射,都应该放在urlpatterns这个变量中。

from django.contrib import admin 
from django.urls import path 
from book import views
urlpatterns = [
	path('admin/', admin.site.urls), 
	path('book/',views.book_list)
]

(3)所有的映射不是随便写的,而是使用path函数或者是re_path函数进行包装的。

3. url添加参数:

(1)采用在url中使用变量的方式:在path的第一个参数中,使用<参数名>的方式可以传递参数。然后在视图函数中也要写一个参数,
视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数,另外,url中可以传递多个参数。
(2)采用查询字符串的方式:在url中,不需要单独的匹配查询字符串的部分。只需要在视图函数中使用request.GET.get('参数名称')的方式来获取。

示例代码如下:

def author_detail(request):
    # ?id = X
    author_id = request.GET.get('id')
    # author_id = request.GET('id')
    text = '作者的id是:%s' % author_id
    return HttpResponse(text)

因为查询字符串使用的是’GET’请求,所以我们通过’request.GET’来获取参数,并且因为"GET"是一个类似于字典的数据类型,所有获取值跟字典的方式都是一样的。

4. urls中的函数

(1)path函数

path(route,view,name=None,kwargs=None)

示例代码如下:

from django.urls import path from . import views

urlpatterns = [
	path('blog//', views.year_archive, {'foo': 'bar'}),
]

(2)re_path函数

示例代码如下:

from django.urls import path, re_path from . import views
urlpatterns = [
	path('articles/2003/', views.special_case_2003), re_path(r'articles/(?P[0-9]{4})/', views.year_archive), 	
	re_path(r'articles/(?P[0-9]{4})/(?P[0-9]{2})/', views.month_archive),
	re_path(r'articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[\w-_]+)/', views.article_detail),
]

(3)include函数

  1. include(pattern,namespace=None):直接把其他appurls 包含进来

示例代码如下:

from django.contrib import admin from django.urls import path,include

urlpatterns = [
	path('admin/', admin.site.urls), 
	path('book/', include("book.urls"))
]

传递namespace 参数来指定一个实例命名空间,但是在使用实例命名空间之前, 必须先指定一个应用命名空间。

示例代码如下:

# 主urls.py文件:
from django.urls import path,include urlpatterns = [
	path('movie/',include('movie.urls',namespace='movie'))
]

然后在 movie/urls.py 中指定应用命名空间。

实例代码如下:

from django.urls import path from . import views

# 应用命名空间
app_name = 'movie'

urlpatterns = 
	[path('',views.movie,name='index'), 		
	path('list/',views.movie_list,name='list'),
]
  1. include(pattern_list):可以包含一个列表或者一个元组,这个元组或者列表中又包含的是 path 或者是 re_path 函数

3.include((pattern,app_namespace),namespace=None) :在包含某个 app 的 urls 的时候,可以指定命名空间,这样做的目的是为了防止不同的 app 下出现相同的 url ,这时候就可以通过命名空间进行区分。

示例代码如下:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
	path('admin/', admin.site.urls),
	path('book/',include(("book.urls",'book')),namespace='book')
]

但是这样做的前提是已经包含了应用命名空间。即在 myapp.urls.py 中添加一个和 urlpatterns 同级别的变量 app_name 。

四、URL命名和反转

路径:E:\Python3.8.0\python_item\python_diango\chapter02\url_name_demo
lsvirtualenv:查看虚拟环境
workon django-env:进入Django-env虚拟环境
pip list:查看模块
pip install Django(python -m pip install Django):安装Django
pip install Django -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --trusted-host pypi.douban.com
cd E:\Python3.8.0\python_item\python_diango
dir:目录
cd chapter02
dir
django-admin startproject first_project:创建项目
python manage.py startapp book:创建项目

文件地址:
E:\Python3.8.0\python_item\python_diango\chapter02\2url_name_demo

1. 登录判断

2. 登录命名修改(url反转)

3. url命名

(1)为什么需要url命名?
因为url是经常变化的,如果在代码中写死可能会经常改代码,给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了,就不需要写死url了。
(2)如何第一个url指定名称?
path函数中,传递一个name参数就可以指定。

示例代码如下:

urlpatterns = [
    path('', views.index, name='index'),
    path('login/', views.login, name='login')
]

4. 应用命名空间

在多个app之间,有可能产生同名的url。这时候为了避免反转url的时候产生混淆,可以使用应用命名空间。来做分区。
定义应用命名空间非常简单,只要在ppurls.py中定义一个叫app_name的变量,来指定这个应用的命名空间即可。

示例代码如下:

app_name = 'front'
urlpatterns = [
    path('', views.index, name='index'),
    path('login/', views.login, name='login')
]

以后在做反转的时候就可以使用"应用命名空间:url名称的方式进行反转。

示例代码如下:

login_url = reverse('front:login')

你可能感兴趣的:(django)