Django框架基础
windows下利用Pycharm创建一个Django框架
目录说明
- 外层的Django基础/根目录仅仅是项目的一个容器。 它的名字与Django无关;可以将其重命名为你喜欢的任何内容。
- manage.py:一个命令行工具,可以使你用多种方式对Django项目进行交互。 你可以在django-admin和manage.py中读到关于manage.py的所有细节。
- 内层的Django基础/目录是你的项目的真正的Python包。 它是你导入任何东西时将需要使用的Python包的名字(例如 mysite.urls)。
- Django基础/init.py:一个空文件,它告诉Python这个目录应该被看做一个Python包。 如果你是Python初学者,请在官方Python文档中阅读关于python包的更多内容。
- Django基础/settings.py:该Django 项目的设置/配置。 Django settings 将告诉你这些设置如何工作。
- Django基础/urls.py:此Django项目的URL声明;Django驱动的网站的“目录”。 你可以在URL dispatcher 中阅读到更多关于URL的内容。
- Django基础/wsgi.py:用于你的项目的与WSGI兼容的Web服务器入口。 更多细节请参见如何使用WSGI部署。
给manage.py设置参数 启动服务器
可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000
再次运行manage.py文件
显示如上图所示,显示服务器开启成功,在网页里输入红框里面地址。
如果有上面显示,就证明服务器正常
django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启。
一:创建子应用
1. 创建
在Pycharm中,Django的子应用可以用Terminal中的命令来创建
python manage.py startapp 子应用名称
2.注册安装子应用
创建出来的子应用目录文件虽然被放到了工程项目目录中,但是django工程并不能立即直接使用该子应用,需要注册安装后才能使用。
在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下
例如,将刚创建的users子应用添加到工程中,可在INSTALLED_APPS列表中添加’users.apps.UsersConfig’
注意:一定是字符串格式,里面是列表,所以要用逗号隔开
# 是django工程注册的应用包括admin模块、用户认真auth模块、sessions模块等,获取了一个字符串的列表数据
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 将刚创建的users子应用添加到工程中
'users.apps.UsersConfig'
]
二:创建视图
1. 创建:
打开刚创建的users模块,在views.py中编写视图代码。
from django.shortcuts import render
from django.http import HttpResponse
from django.views import View
# Create your views here.
# 简单的视图
def index(request):
'''
index视图
:param request:每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。
:return:这个视图会返回一个HttpResponse对象,其中包含生成的响应。 每个视图函数都负责返回一个HttpResponse对象。 (有例外,我们接下来会讲。)
'''
return HttpResponse("hello the world!")
# 定义视图类
class RegisterView(View):
'''类视图,处理注册'''
def get(self, request):
'''处理get请求,返回页面'''
return render(request, 'register.html')
def post(self, request):
"""处理POST请求,实现注册逻辑"""
return HttpResponse('这里实现注册逻辑')
'''
类视图的好处:
1.代码可读性好
2.类视图相对于函数视图有更高的复用性, 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可
'''
2. 定义路由URL
1) 在子应用中新建一个urls.py文件用于保存该应用的路由。
2) 在users/urls.py文件中定义路由信息。
from django.conf.urls import url
from . import views
# urlpatterns是被django自动识别的路由列表变量
urlpatterns = [
# 每个路由信息都需要使用url函数来构造
# url(路径, 视图)
url(r'^index$', views.index),
# 类视图配置路由时,使用类视图的as_view()方法来添加。可以起名,防止url重复导致覆盖
url(r'^register/$', views.RegisterView.as_view(), name='register'),
]
3) 在工程总路由demo/urls.py中添加子应用的路由数据。
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
# django默认包含的
url(r'^admin/', admin.site.urls),
# 添加
url(r'^users/', include('users.urls')),
]
4) 启动运行
在浏览器中输入网址127.0.0.1:8000/users/index/ 可看到返回的信息
三:路由说明
1. 路由定义位置
Django的主要路由信息定义在工程同名目录下的urls.py文件中,该文件是Django解析路由的入口。
每个子应用为了保持相对独立,可以在各个子应用中定义属于自己的urls.py来保存该应用的路由。然后用主路由文件包含各应用的子路由数据。
除了上述方式外,也可将工程的全部路由信息都定义在主路由文件中,子应用不再设置urls.py。但是这种方法不适用于团队合作,如果路由重复,只会先调用第一个路由,造成错误。
2. 路由解析顺序
Django在接收到一个请求时,从主路由文件中的urlpatterns列表中以由上至下的顺序查找对应路由规则,如果发现规则为include包含,则再进入被包含的urls中的urlpatterns列表由上至下进行查询。
值得关注的由上至下的顺序,有可能会使上面的路由屏蔽掉下面的路由,带来非预期结果
3. 路由命名与reverse反解析(逆向)
3.1 路由命名
在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。
1) 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,例如
url(r'^users/', include('users.urls', namespace='users')),
命名空间表示,凡是users.urls中定义的路由,均属于namespace指明的users名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2) 在定义普通路由时,可以使用name参数指明路由的名字,如
url(r'^index/$', views.index, name='index'),
url(r'^register/$', views.RegisterView.as_view(), name='register'),
2)反解析和重定向
from django.shortcuts import render
from django.http import HttpResponse
# 导入类视图
from django.views import View
# 导入reverse反解析
from django.urls import reverse
# 导入redirect重定向
from django.shortcuts import redirect
def index(request):
'''
index视图
:param request:每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。
:return:这个视图会返回一个HttpResponse对象,其中包含生成的响应。 每个视图函数都负责返回一个HttpResponse对象。 (有例外,我们接下来会讲。)
'''
return HttpResponse("hello the world!")
def reverse_test(request):
# 反解析命名空间为user下的命名为index的url路径
url = reverse('users:index')
print(url)
# redirect重定向到index视图
return redirect(url)
**输入http://localhost:8000/users/serever会自动跳转到http://localhost:8000/users/index
4. 路径结尾斜线/的说明
Django中定义路由时,通常以斜线/结尾,其好处是用户访问不以斜线/结尾的相同路径时,Django会把用户重定向
到以斜线/结尾的路径上,而不会返回404不存在。如
urlpatterns = [
url(r'^index/$', views.index, name='index'),
]
用户访问 index 或者 index/ 网址,均能访问到index视图。