从零开始学Django
编写自己的第一个Django应用-基础篇-第一部分
借鉴参考Django官方文档
欢迎来到Django学习基础
通过这个教程,我会带这你创建一个基本的web应用程序,首先先来了解一下Django,假设你已经安装了Django安装Django,且知道Django对应的版本
pip install pymysql
pip install django
python -m django --version
环境介绍
介绍一下开发环境,不同系统不同版本之间的开发其实大同小异,看个人的喜好,很多时候还没开始学就被环境配置吓到了,个人建议如果初学可以忽略一些配置,
我也会尽量跳出这些层面,尽量兼顾。
- python虚拟环境的配置 ,这个是为了防止不同Django版本的web应用程序发生冲突,几个版本之间的差异不是特别大,留意一下就好了。其实问题不大.安装难度 ** ,
-
pycharm 因为后面的开发需要你不停地切换目录,有pycharm比较方便,安装难度 ** 难度在于在Ubuntu怎么可以快捷启动pycharm,直接安装是需要在终端启动的 cd到pycharm的bin 输入
./pycharm.sh
; - Django版本 Django是2.1的版本,安装难度 *
- 数据库 我使用的是mysql5.7,mysql算是比较主流的一个数据库,各方面支持比较好.安装难度 ** 问题在于初次启动时的密码可能出问题;
-
操作系统虚拟机Ubuntu,个人觉得终端用起来比较舒服 安装难度 * ;
所有的安装都有教程,可自行百度,
开始
创建项目
运行以下命令:
django-admin startproject mysite
mysite就是你创建项目的名字
cd进入文件夹,运行命令:
cd mysite
tree
值得注意的是,项目名字不要与python-Django内部的保留名冲突,例如test,Django之类的
这些目录与文件的用处
- manage.py 是一个管理命令行工具,详细了解阅读
- mysite 是一个文件夹,里面的 __init__表示这是一个python包,方便在项目其他文件中引入
- setting.py Django项目的配置文件,
- wsgi.py 是主要的浏览器与服务器交互的入口,请求与响应从这里交互,可以说很重要了。
测试一下Django上的简易服务器
python manage.py runserver
此时会生成一下内容:
值得注意的是:runserver 后面可以自己自定义自己的ip与port ,如果没有加上,那么默认就是 127.0.0.1:8000 ,这是在wsgi里面就决定的,
在你的浏览器里面输入: 127.0.0.1:8000.显示下面页面(如果在runserver后面加上了自定义的,那么同理输入自己定义的,)
获取本机ip命令:
linux
ifconfig
Windows
ipconfig
我是在虚拟机上启动的,现在在Windows*问,提前的步骤是添加链接描述
如果想了解更多runserver 点这个
创建一个应用
在Django中,其实在python中,包是非常重要的,这里的应用其实是一个包,
项目 VS 应用
项目和应用有啥区别?应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用
请确定你现在处于 manage.py 所在的目录下,然后运行这行命令来创建一个应用
python manage.py startapp vote
这里会创建一个vote目录
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── wsgi.cpython-36.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── vote
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
vote这里缺少了一个文件 url.py,需要手动创建一个
MVC
Django遵循快速开发和DRY原则。Do not repeat yourself.
Django借鉴MVT框架,产生的MVC
核心在于:解耦,让他们之间的依懒性不那么强,增强代码的可移植性和替代性
models ------> 在models.py 中可以通过一系列的操作,去关联数据库。
views.py -------> 这里关联的就是视图,简单来说就是通过这个函数去操作呈现网页上的内容
C:控制器--------> 中转站,接受信息,传递信息
编写视图
开始编写第一个视图:
打开pycharm,找到你建立的项目mysite
打开vote下面的views.py
from django.http import HttpResponse
def index(request):
return HttpResponse('这是第一个视图')
如果出现错误
这里需要提醒的是ALLOE_HOSTS = [] 这个需要注释掉
Django是如何匹配从url中返回给浏览器想要的数据的
首先:进入mysite/urls.py里面:
urlpatterns = [
path('vote/', include('vote.urls')),
path('admin/', admin.site.urls),
]
函数 include() 允许引用其它 URLconfs。每当 Django 遇到 :func:~django.urls.include 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理
这里表示的是当浏览器的url,传到mysite/urls.py 第一个参数是正则表达式,匹配到vote后,就会把后面传给
下面的vote/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
此时这里接收到了url后面的一部分,进行匹配,
path函数:
path() 参数: route
route 是一个匹配 URL 的准则(正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求
path() 参数: view
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入
path() 参数: name
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
为你的url指定唯一的名字,相当于在上面加了一个标签,不管url怎么变,只引用name就行了
现在,运行页面
猜想一下:你要在页面上运行页面,应该在浏览器里面输入哪个url
现在理一下这几个的关系:
浏览器的url -------》mysite/urls.py--------》vote/urls.py------>调用视图views.index
python manage.py runserver #这里我后面没有加ip:port,使用默认的
浏览器输入:127.0.0.1:8000/vote/index
mysite/urls.py接收,出去域名,剩下vote/index
匹配 vote ,将剩下index传入 vote.urls.py中去匹配
匹配index成功,返回调用views.index函数,index视图函数返回给浏览器 (‘这是第一个视图’)
如图: