manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
默认目录
Sec_Tools/init.py一个空文件,告诉 Python 该目录是一个 Python 包。
该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
1
2
3
4
5
6
7
8
9
| urlpatterns = [
path('admin/', admin.site.urls),
path('', include('webscan.urls')), # 信息收集,前端页面
path('', include('login.urls')), # 登录注册
path('', include('dirscan.urls')), # 目录识别
path('', include('vulnscan.urls')), # 漏洞检测
path('webscan_backend/', include('webscan_backend.urls')), # 后端接口
re_path(r'media/(?P<path>.*)$', serve, {'document_root':settings.MEDIA_ROOT}),
]
|
一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目
ASGI(Asynchronous Server Gateway Interface)和WSGI(Web Server Gateway Interface)都是Python的服务器网关接口,用于定义Web服务器和Web应用程序或框架之间的通信标准。ASGI相对于WSGI具有更高的性能和更多的功能,尤其是在处理现代Web应用中的并发请求和实时通信方面。然而,这也意味着开发者需要了解并处理异步编程的复杂性
该 Django 项目的设置/配置。
admin页面设计
使用国人自己设计的主题
smpleui
在新的django项目中,admin设置和url路径已经设置好了,
如
Django Admin 管理工具 | 菜鸟教程
在使用http://127.0.0.1:8000/之前
还得输入python manage.py migrate
去使用 apply the migrations for app(s): admin, auth, contenttypes, sessions。
可以通过命令 python manage.py createsuperuser
来创建超级用户
管理员账户
admin/password..!! email :[email protected]
将页面的静态资源下载下来×
新建一个static文件夹,和mypro文件夹并列,
在settings.py文件里面设置
1
2
| # 设置静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
|
在终端输入python manage.py collectstatic
经过操作实践,本地下载静态资源下来访问一直访问不到,
在 Django 项目中,当您关闭 DEBUG 模式时,Django 默认不再提供静态文件的服务。这是因为 Django 的开发服务器(runserver
)仅在 DEBUG 模式开启时提供静态文件服务。当您在生产环境中部署 Django 项目时,通常会有一个专门的静态文件服务器来处理静态文件的请求。
在生产环境中,您应该配置 Web 服务器(如 Nginx、Apache)来提供静态文件。这通常涉及到在 Web 服务器的配置文件中添加一个指向静态文件目录的别名,并配置适当的访问权限。
常用子命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 常用子命令:
startproject:创建一个项目(*)
startapp:创建一个app(*)
runserver:运行开发服务器(*)
shell:进入django shell(*)
dbshell:进入django dbshell
check:检查django项目完整性
flush:清空数据库
compilemessages:编译语言文件
makemessages:创建语言文件
makemigrations:生成数据库同步脚本(*)
migrate:同步数据库(*)
showmigrations:查看生成的数据库同步脚本(*)
sqlflush:查看生成清空数据库的脚本(*)
sqlmigrate:查看数据库同步的sql语句(*)
dumpdata:导出数据
loaddata:导入数据
diffsettings:查看你的配置和django默认配置的不同之处
manage.py特有的一些子命令:
createsuperuser:创建超级管理员(*)
changepassword:修改密码(*)
clearsessions:清除session
|
创建第一个app应用页面
终端输入代码python manage.py startapp blog
,会产生以下目录结构
1
2
3
4
5
6
7
8
9
10
| blog #应用目录
│ admin.py #对应应用后台管理配置文件。
│ apps.py #对应应用的配置文件。
│ models.py #数据模块,数据库设计就在此文件中设计。后面重点讲解
│ tests.py #自动化测试模块,可在里面编写测试脚本自动化测试
│ views.py #视图文件,用来执行响应代码的。你在浏览器所见所得都是它处理的。
│ __init__.py
│
├─migrations #数据迁移、移植文目录,记录数据库操作记录,内容自动生成。
│ │ __init__.py
|
我们想要在页面输出hellworld,先在views.py中写入
1
2
3
4
| from django.http import HttpResponse
def hello(request):
return HttpResponse('Hello,world')
|
然后在settings.py页面的INSTALLED_APPS加入blog,再在urls.py中加入
1
2
3
4
5
6
| from blog import views
urlpatterns = [
path('admin', admin.site.urls),
path('',views.hello),
]
|
运行即可。
路由设置
当一个用户请求访问Django站点的一个页面时,然后就由Django路由系统(URL配置文件)去决定要执行哪个视图函数使用的算法。这个路由系统我们也称之为url控制器,一般是项目目录和应用目录里的urls.py文件
1
2
3
4
5
6
7
8
| urlpatterns = [
path(正则表达式, views视图函数,参数,别名),
]
参数说明:
1、一个正则表达式字符串
2、一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
3、可选的要传递给视图函数的默认参数(字典形式)
4、一个可选的name参数(别名)
|
URL转发、不满意原页面
例如不满意原错误页面404
当Django找不到与请求匹配的URL时,或者当抛出一个异常时,将调用一个错误处理视图。错误视图包括400、403、404和500,分别表示请求错误、拒绝服务、页面不存在和服务器错误。它们分别位于:
- handler400 —— django.conf.urls.handler400。
- handler403 —— django.conf.urls.handler403。
- handler404 —— django.conf.urls.handler404。
- handler500 —— django.conf.urls.handler500。
这些值可以在根URLconf中设置。在其它app中的二级URLconf中设置这些变量无效。
1
2
3
4
5
6
7
8
9
10
11
12
| # urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^blog/$', views.page),
url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]
# 增加的条目
handler400 = views.bad_request
handler403 = views.permission_denied
handler404 = views.page_not_found
handler500 = views.page_error
|
1
2
3
4
5
6
7
8
9
10
11
12
| views.py
def page_not_found(request):
return render(request, '404.html')
def page_error(request):
return render(request, '500.html')
def permission_denied(request):
return render(request, '403.html')
def bad_request(request):
return render(request, '400.html')
|
再根据自己的需求,创建404.html、400.html等四个页面文件,就可以了。
路由分发
1
2
3
4
| urlpatterns = [
path('community/', include('aggregator.urls')),
#urls分层模块化(路由分发)
]
|
注意,这个例子中的正则表达式没有包含$(字符串结束匹配符),但是包含一个末尾的斜杠。 每当Django 遇到include()
(来自django.conf.urls.include()
)时,它会去掉URL中匹配的部分并将剩下的字符串发送给include的URLconf做进一步处理,也就是转发到二级路由去。
去除路由冗余
1
2
3
4
5
6
7
8
9
10
| extra_patterns = [
path('reports/', credit_views.report),
path('reports/<int:id>/', credit_views.report),
path('charge/', credit_views.charge),
]
urlpatterns = [
path('', main_views.homepage),
path('help/', include('apps.help.urls')),
path('credit/', include(extra_patterns)),
]
|
在这个例子中, /credit/reports/ URL将被 credit.views.report() 这个Django 视图处理。
1
2
3
4
5
6
7
8
| urlpatterns = [
path('<page_slug>-<page_id>/', include([
path('history/', views.history),
path('edit/', views.edit),
path('discuss/', views.discuss),
path('permissions/', views.permissions),
])),
]
|
通过只声明共同的路径前缀一次并将后面的部分分组转发
捕获参数、嵌套参数、向视图传递额外的参数、传递额外的参数给include()、url的反向解析(略)
Django2.0入门教程:路由配置系统URLconf
页面和数据库基本响应(例子blog)
Django2.0入门教程:MVC与MTV开发模式
视图函数
视图函数是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。这个视图函数代码一般约定是放置在项目或应用程序目录中的名为views.py的文件中。
http请求中产生两个核心对象:
1、http请求—->HttpRequest对象,用户请求相关的所有信息(对象)
2、http响应—->HttpResponse对象,响应字符串
1
2
3
4
5
6
7
8
| views1.py
from django.http import HttpResponse
def index(request):
return HttpResponse("你好")
在urls.py中修改配置
from . import views1
path('', views1.index, name='index'),
|
例子里,我们用到的request,就是HttpRequest对象。HttpResponse(“你好”),就是HttpResponse对象,它向http请求响应了一段字符串。
视图函数,就是围绕着HttpRequest和HttpResponse这两个对象进行的。
数据模型字段及属性详解
设计数据模型的时候,我们需要根据不同的需求,设计不同的表和不同的字段。不同的字段也可以设置不同的参数
django根据代码中定义的类来自动生成数据库表。我们写的类表示数据库的表,如果根据这个类创建的对象是数据库表里的一行数据,对象.id 对象.value是每一行里的数据
Django2.0入门教程:数据模型字段及属性详解
Django博客开发教程:体验数据查询
django页面模板
1
2
3
4
5
6
7
8
9
| view.py
def index(request):
blog_index = models.Article.objects.all().order_by('user')
context = {
'blog_index':blog_index,
}
return render(request, 'index.html',context)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客首页</title>
</head>
<body>
<div>
<ul>
<h3>最新文章</h3>
{% for x in blog_index %}
<li><h2>{{ x.title }}</h2>
{{ x.body }}
</li>
{% endfor %}
</ul>
</div>
</body>
</html>
|
python的各种对象均可以通过context传到前端。
Django博客开发教程:体验django模板
Django博客开发教程:使用富文本编辑器添加数据