六、Django学习之小试牛刀
其他关于Python Web开发笔记:(如果遇到问题可以一起交流~)
一、Flask学习之HTML-CSDN博客
二、Flask学习之CSS-CSDN博客
【接上篇】二、Flask学习之CSS(下篇)-CSDN博客
三、Flask学习之BootSrap-CSDN博客
四、Flask学习之JavaScript-CSDN博客
五、Flask学习之MySQL-CSDN博客
1.安装Django
使用如下命令下载Django,会自动根据你的Python版本安装对应版本的Django:
pip install Django
下载完成后进入到你的Python解释器的文件夹(安装Django的那个),然后再Script文件夹中会有一个名为django-admin.exe的文件,这个程序是用来帮助你创建Django项目的,如果没有,说明你的Django没有下载成功。
2.创建Django项目
创建Django项目有两种方式:
-
使用django-admin.exe程序创建(新手推荐)
首先打开终端,进入到你想要存放Django项目的文件夹,然后执行以下命令:
django-admin startproject mysite
注意:如果你没有把django-admin添加到环境变量,就需要把django-admin替换为django-admin的路径,例如:“D:\Anaconda\envs\Djangopro\Scripts\django-admin.exe”
-
使用Pycharm(专业版)自带的Django项目
在新建项目里面找到Django,然后输入你的项目名称,存放路径,Python解释器环境,就直接创建好了
两种方式创建出来的项目有区别,后面会讲到有什么区别
上面两种方式创建的目录结构稍有不同,建议使用第一种
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
[官方文档](编写你的第一个 Django 应用,第 1 部分 | Django 文档 | Django (djangoproject.com))对这些文件的介绍是这样的:
这些目录和文件的用处是:
- 最外层的
mysite/
根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。manage.py
: 一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 django-admin 和 manage.py 获取所有manage.py
的细节。- 里面一层的
mysite/
目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如mysite.urls
).mysite/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果你是 Python 初学者,阅读官方文档中的 更多关于包的知识。mysite/settings.py
:Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 Django 配置 了解细节。mysite/urls.py
:Django 项目的 URL 声明,就像你网站的“目录”。阅读 URL调度器 文档来获取更多关于 URL 的内容。mysite/asgi.py
:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口。阅读 如何使用 ASGI 来部署 了解更多细节。mysite/wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 如何使用 WSGI 进行部署 了解更多细节。
3.测试Django
运行项目的方式有两种:
- 直接使用PyCharm运行本项目
- 在终端使用命令
python manage.py runserver
浏览器打开网址: http://127.0.0.1:8000/ 如果出现下面的小火箭就说明运行成功!
4.创建APP
在终端中运行下列代码:
python manage.py startapp myapp01
可以把APP想象成一个个模块,一个项目可以创建不同的APP,每个APP负责一个功能
在根目录会自动创建一个文件夹名为myapp01,目录结构为:
├─myapp01
│ │ admin.py # 管理后台(一般不用)
│ │ apps.py # 不要动
│ │ models.py # 对数据库进行操作(重要)
│ │ tests.py # 单元测试
│ │ views.py # 视图,存放函数的地方 (重要)
│ │ __init__.py
│ │
│ └─migrations # 不要动
│ __init__.py
5.简单页面
创建完成APP以后,Django并不会感知到APP,需要我们在settings.py文件中进行注册。
打开settings.py,修改INSTALLED_APPS:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"myapp01.apps.Myapp01Config" # 改成你的APP下的自己名称
]
编写视图和URL的关系:
打开urls.py:改成你网址的url
from django.urls import path
from myapp01 import views
urlpatterns = [
# path("admin/", admin.site.urls),
path("index/", views.index)
]
函数path具有四个参数(官方文档),两个必须参数:route
和 view
,两个可选参数:kwargs
和 name
-
route
route
是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从urlpatterns
的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求
https://www.example.com/myapp/
时,它会尝试匹配myapp/
。处理请求https://www.example.com/myapp/?page=3
时,也只会尝试匹配myapp/
。 -
view
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个
HttpRequest
对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。 -
kwargs
任意个关键字参数可以作为一个字典传递给目标视图函数。
-
name
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
然后修改你的views.py里面的代码:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world!")
运行本项目,在浏览器框中输入http://localhost:8000/index/
然后得到结果:
6.模板和静态文件
6.1模板
模板是你存放HTML文件的地方,使用Pycharm创建的项目和使用官方提供的方法创建的目录会有所不同。具体可以参见官方文档,去settings.py里面修改。这里以使用官方方法创建的项目目录为例:
在上面==已经创建好的app文件夹中创建文件夹templates==,然后可以新建HTML
在py文件索引HTML文件的时候,会按照appd的注册顺序去寻找
这里新建一个页面user_list.html为例,首先要在urls.py里面添加url:
path("user/list/", views.user_list)
然后去views.py里面创建对应的函数:
from django.http import HttpResponse
from django.shortcuts import render
def user_list(request):
return render(request, "user_list.html")
随后在templates里面创建文件user_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
</body>
</html>
然后运行就能得到结果。
6.2静态文件
同样使用官方法创建的项目为例,static目录是用来存放css、js、照片等插件的地方。已经创建好的app文件夹中创建文件夹static,然后将下载好的js,bootsrap复制过来
myapp01目录结构
├─static
│ ├─css
│ ├─img
│ ├─js
│ └─plugins
│ └─bootstrap-3.4.1-dist
│ ├─css
│ ├─fonts
│ └─js
├─templates
继续美化上面的user_list.html:
{% load static %} {# 加载static文件夹,方便项目找到static下面的文件 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{# 引入bootsrap #}
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.css' %}">
</head>
<body>
<h1>用户列表</h1>
<input type="button" class="btn btn-primary" value="新建">
{#<img src="{% static 'img/1.png' %}" alt="">#}
{# 引入js #}
<script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
</body>
</html>
得到结果: