路径: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 项目,新建项目的截图如下:
使用 pycharm 创建完项目后,还是需要重新进入到命令行单独创建 app 的。
python manage.py runserver:运行python
http://127.0.0.1:8000:前端
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
'''
django-admin startproject [项目的名称]
'''
这样就可以在当前目录下创建一个项目了。
'''
python manage,py runserver
'''
注意:用pycharm运行项目,要避免一个项目运行多次。
在项目配置中,把“只用单一实例”那个选项勾选上,避免以上的问题。
'''
python
ALLOWED_HOSTS = ['92.168.2.102']
'''
注意:要关闭自己电脑的防火墙才行。
1. manage.py
以后和项目交互基本上都是基于这个文件。一般都是在终端输入 python manage.py [子命令]
。可以输入 python manage.py help
看下能做什么事情。除非你知道你自己在做什么,一般情况下不应该编辑这个文件。
2. settings.py
保存项目所有的配置信息
3. urls.py
用来做url与视图函数映射的。以后来了一个请求,就会从这个文件中找到匹配的视图函数
4. wsig.py
专门用来做部署的,不需要修改。
文件地址:
E:\Python3.8.0\python_item\python_diango\chapter02\1view_func_demo1
(1)视图函数的第一个参数必须是request
,这个参数绝对不能少。
(2)视图函数的返回值必须是django.http.response.HttpResponseBase
from django.http import HttpResponse
def book_list(request):
return HttpResponse("书籍列表!")
(1)为什么会去urls.py
文件中寻找映射呢?
是因为在settings.py
文件中配置了ROOT_URLCONF
为urls.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
函数进行包装的。
(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"是一个类似于字典的数据类型,所有获取值跟字典的方式都是一样的。
path(route,view,name=None,kwargs=None)
示例代码如下:
from django.urls import path from . import views
urlpatterns = [
path('blog//' , views.year_archive, {'foo': 'bar'}),
]
示例代码如下:
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),
]
include(pattern,namespace=None)
:直接把其他app
的urls
包含进来示例代码如下:
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'),
]
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 。
路径: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)为什么需要url
命名?
因为url
是经常变化的,如果在代码中写死可能会经常改代码,给url
取个名字,以后使用url
的时候就使用他的名字进行反转就可以了,就不需要写死url
了。
(2)如何第一个url
指定名称?
在path
函数中,传递一个name
参数就可以指定。
示例代码如下:
urlpatterns = [
path('', views.index, name='index'),
path('login/', views.login, name='login')
]
在多个app
之间,有可能产生同名的url
。这时候为了避免反转url
的时候产生混淆,可以使用应用命名空间。来做分区。
定义应用命名空间非常简单,只要在pp
的urls.py
中定义一个叫app_name
的变量,来指定这个应用的命名空间即可。
示例代码如下:
app_name = 'front'
urlpatterns = [
path('', views.index, name='index'),
path('login/', views.login, name='login')
]
以后在做反转的时候就可以使用"应用命名空间:url名称
的方式进行反转。
示例代码如下:
login_url = reverse('front:login')