0基础——Django学习笔记

1. 为何选择Django?

使用Django,您可以在几个小时内将Web应用程序从概念发布到启动。Django负责处理Web开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费和开源的。

Django旨在帮助开发人员尽快将应用程序从概念到完成。

Django包含许多可用于处理常见Web开发任务的附加功能。Django负责用户身份验证,内容管理,站点地图,RSS源以及更多任务 - 开箱即用。

Django严肃对待安全性并帮助开发人员避免许多常见的安全错误,例如SQL注入,跨站点脚本,跨站点请求伪造和点击劫持。其用户身份验证系统提供了一种管理用户帐户和密码的安全方法。

Django快速灵活的扩展能力使很多访问量非常大的网站使用它。

很多机构已经使用Django来构建各种各样的东西 - 从内容管理系统到社交网络再到科学计算平台。

2. 如何开始?

2.1. 快速安装指南

Python包含一个名为SQLite的轻量级数据库,因此您不需要设置数据库。

https://www.python.org/downloads/或使用操作系统的软件包管理器获取最新版本的Python 。

您可以通过从shell 输入python来验证是否已安装Python ; 你应该看到类似的东西:

Python 3.x.y

[GCC 4.x] on linux

Type "help", "copyright", "credits"  **or**  "license"  **for** more information.

>>>

你有三个简单的选项来安装Django:

  • 安装正式版。这是大多数用户的最佳方法。
  • 安装操作系统分发版提供的Django版本。
  • 安装最新的开发版本。此选项适用于需要最新和最强大功能并且不怕运行全新代码的发烧友。您可能会在开发版本中遇到新的错误,但报告它们有助于Django的开发。此外,与最新的稳定版本相比,第三方软件包的发行版不太可能与开发版本兼容。

这里介绍一下安装正式版的方法:

  1. 首先要安装pip,最简单的方法是使用pip的独立安装程序,但是实际上如果你已经安装了python那么对应版本的pip就已经安装好了。
  2. 运行:
$ pip install Django
  1. 验证安装, 要验证Python可以看到Django,请从shell中输入python。然后在Python提示符下,尝试导入Django::
>>>import django
>>>print(django.get_version())
2.2

至此你已经成功安装了django。

2.2. 第一个Django应用程序

这个样例中将创建第一个简单的Django应用程序,它由两部分组成:

  • 一个公共站点,允许人们查看民意调查并在其中投票。
  • 一个管理站点,允许您添加,更改和删除民意调查。

我们假设你已经安装了Django。您可以通过在shell提示符中运行以下命令(由$前缀表示)来告知Django已安装以及哪个版本:

$ python -m django –version

如果安装了Django,您应该会看到安装的版本。如果不是,您将收到错误消息“没有名为django的模块”。

为了创建第一个Django网站,需要配置Django生成一些初始设置。使用Django-admin命令将自动生成一些建立Django 项目的代码,包括数据库配置,Django特定选项和特定于应用程序的设置。

从命令行cd进入要存储代码的目录,然后运行以下命令,这将在当前目录中创建一个mysite目录。:

$ django-admin startproject mysite

注意:您需要避免在内置Python或Django组件的名称来命名项目,例如像django(这将与Django本身冲突)或test(与内置Python包冲突)这样的名称。

让我们来看看startproject创造了什么:

mysite/
   manage.py
   mysite/
     __init__.py
     settings.py
     urls.py
     wsgi.py
  • 外部mysite/根目录只是项目的容器。它的名字对Django来说无关紧要; 你可以将它重命名为你喜欢的任何东西。

  • manage.py:一个命令行实用程序,允许您以各种方式与此Django项目进行交互。您可以在django-admin和manage.py中阅读有关的所有详细信息 。

  • 内部mysite/目录是项目的实际Python包。它的名称是您需要用来导入其中任何内容的Python包名称(例如mysite.urls)。

  • mysite/init.py:一个空文件,告诉Python该目录应该被视为Python包。

  • mysite/settings.py:此Django项目的设置/配置。 Django设置将告诉您有关设置如何工作的所有信息。

  • mysite/urls.py:这个Django项目的URL声明; 您的Django支持的站点的“目录”。您可以在URL调度程序中阅读有关URL的更多信息。

  • mysite/wsgi.py:与WSGI兼容的Web服务器的入口点,用于为您的项目提供服务。有关更多详细信息,请参阅如何使用WSGI进行部署

启动开发版服务器:

$ python manage.py runserver

您将在命令行中看到以下输出:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

July 19, 2019 - 15:50:53
Django version 2.2, using settings 'mysite.settings'
Starting development server at [http://127.0.0.1:8000/](http://127.0.0.1:8000/)
Quit the server with CONTROL-C.

注意:暂时忽略有关未应用数据库迁移的警告; 我们很快就会处理数据库。

您已经启动了Django开发服务器,这是一个纯粹用Python编写的轻量级Web服务器。我们已经将它包含在Django中,因此您可以快速开发,而无需处理配置生产服务器(如Apache),直到您准备好进行生产。

注意:不要在生产环境中使用此服务器。它仅用于开发时使用。(我们的业务是制作Web框架,而不是Web服务器。)

现在服务器正在运行,请使用Web浏览器访问http://127.0.0.1:8000/。你会看到一个“Congratulations!”页面,火箭起飞。有效!


改变端口:默认情况下,该runserver命令在端口8000的内部IP上启动开发服务器。如果要更改服务器的端口,请将其作为命令行参数传递。例如,此命令在端口8080上启动服务器:

$ python manage.py runserver 8080

如果要更改服务器的IP,请将其与端口一起传递。例如,要侦听所有可用的公共IP(如果您正在运行Vagrant或想要在网络上的其他计算机上展示您的工作,这很有用),请使用:

$ python manage.py runserver 0:8000

00.0.0.0的快捷方式。

2.3. 创建子应用

您在Django中编写的每个应用程序都包含一个遵循特定约定的Python包。Django附带了一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。

您的应用程序可以存在于Python路径的任何位置。在本教程中,我们将在您的manage.py 文件旁边创建我们的民意调查应用程序,以便可以将其作为自己的顶级模块导入,而不是作为子模块导入mysite

要创建应用程序,请确保您与该目录位于同一目录中manage.py 并键入以下命令:

$ python manage.py startapp polls

这将创建一个目录polls,其布局如下:

polls/
   __init__.py
  admin.py
  apps.py
  migrations/
     __init__.py
  models.py
  tests.py
  views.py

我们来写第一个视图。打开文件polls/views.py 并在其中放入以下Python代码:

from django.http import HttpResponse
def  index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

这是Django中最简单的视图。要调用视图,我们需要将其映射到URL - 为此我们需要一个URLconf。

要在polls目录中创建URLconf,请创建一个名为的文件urls.py。应用目录现在应该如下所示:

polls/
  __init__.py
  admin.py
  apps.py
  migrations/
    __init__.py
  models.py
  tests.py
  urls.py
  views.py

在该polls/urls.py文件中包含以下代码:

from django.urls import path
from . import views
urlpatterns  = [
    path('', views.index, name='index'),
]

下一步是将根URLconf指向polls.urls模块。在 mysite/urls.py,添加导入django.urls.includeinclude()urlpatterns列表中插入一个 ,所以你有:

from django.contrib impor admin
from django.urls import include, path
urlpatterns  = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

include()函数允许引用其他URLconf。每当Django遇到时include(),它都会删除与该点匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf以进行进一步处理。

include()的设计思想是使即插即用的URL变得容易。由于子应用polls位于他们自己的URLconf(polls/urls.py)中,因此可以将它们放在“/ polls /”下。或“/ fun_polls /”下,或“/ content / polls /”下,或任何其他路径根目录下,并且应用程序仍然可以工作。

您现在已将index视图连接到URLconf。验证它是否使用以下命令

$ python manage.py runserver

在浏览器中转到http:// localhost:8000 / polls /,您应该看到在index视图中定义的文本“ Hello, world. You're at the polls index. “。

path()函数传递了四个参数,两个必需: routeview,以及两个可选:kwargs,和name

route是一个包含URL模式的字符串。处理请求时,Django从第一个模式开始urlpatterns并沿着列表向下移动,将请求的URL与每个模式进行比较,直到找到匹配的模式。

模式不搜索GET和POST参数或域名。例如,在请求中https://www.example.com/myapp/,URLconf将查找myapp/。在请求中https://www.example.com/myapp/?page=3,URLconf也会查找myapp/

view当Django找到匹配模式时,它会调用指定的视图函数,并将HttpRequest对象作为第一个参数,并将路由中的任何“捕获”值作为关键字参数调用。

kwargs任意关键字参数可以在字典中传递到目标视图。

name命名您的URL可以让您从Django的其他地方明确地引用它,特别是在模板中。此强大功能允许您在只触摸单个文件的同时对项目的URL模式进行全局更改。

3. Django中载入js和css文件

以layui为例,项目的文件夹结构例如以下:



settings.py中static变量的设置:

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
STATIC_URL = '/static/'

urls.py中添加引用

from django import views
from . import settings

urlpatterns的设置中添加:

url(r'^static/(?P<path>.*)$', views.static.serve, {
'document_root': settings.STATIC_ROOT,
}, name='static'), 

模板文件里的引用方式:

<script src="/static/jquery.js"></script>
<link href="/static/doc.css" rel="stylesheet" type="text/css">

最后再将djangoWorkSpace加进setting.py的

# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'djangoWorkSpace',
]

样例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>开始使用layui</title>
<link rel="stylesheet" href="/static/layui/css/layui.css">
</head>
<body>
<!-- 你的HTML代码 -->
<script src="/static/layui/layui.js"></script>
<script>
//一般直接写在一个js文件中
var hello_value = "{{hello}}";
layui.use(['layer', 'form'], function(){
var layer = layui.layer
,form = layui.form;
layer.msg(hello_value);
});
</script> 
</body>
</html>

其中view.py中
···
from django.shortcuts import render
def hello(request):
context = {}
context['hello'] = 'Hello World My Firt Django and layui app!'
return render(request, 'hello.html', context)
···
效果


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容