2、Django_创建第一个应用

Django的特点
  • 优点
    python语言、代码干净、整洁
    提供管理后台,可以快速开发
    复用度高,设计和使用上遵循DRY原则
    易于扩展复用的中间件
    内置安全框架
    丰富的第三方类库
  • 缺点
    单体应用 - 不易并行开发,单点扩展
    不适合非常小的几行代码的项目
    不适用于高并发的to C 项目
一、安装
  • 官网下载安装包
    https://media.djangoproject.com/releases/2.2/Django-2.2.5.tar.gz;没用过,接下来的步骤自行百度
  • pip下载
    1.命令:pip isntall Django
    2.坑位:
    出现WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
    解决方法:使用pip install 【需要下载的东西】-i http://pypi.douban.com/simple --trusted-host pypi.douban.com进行安装
二、创建项目和运行
  • 命令行
    1.创建项目
django -admin startproject 项目名

2.运行项目

$ python manage.py runserver
$ python manage.py runserver ip:端口
  • Pycharm

    1.创建项目:
    create
  • 坑位
    出现Make sure that you use the Django version of 'pip' installed for your Python interpreter
    解决方法:切换到提示框所说的路径下,然后运行pip install Django -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
    然后再点击提示框的按钮
    结果:
    创建成功

2.运行项目:
运行成功

3.访问localhost:8000:
访问
三、语言和时间改成中文

修改settings.py文件:

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

结果:
中文
四、目录结构和介绍
目录结构
  • 最外层的Django_Test
    是项目的容器,Django并不关心它的名称,可以将它任意命名
  • manage.py
    可以让使用者使用各种方式管理Django项目的命令行工具。详情看:manage
  • 里面一层的Django_Test
    包含了项目,它是一个纯Python包。它的名字就是当前Django项目的名字,我们引用它内部任何东西时,使用的就是这个名字
  • Django_Test/__init__.py:Python基础的知识;一个空文件,用于告诉Python当前目录应该是一个Python包
  • Django_Test/settings.py:Django项目的配置文件。详情看:Django settings
  • Django_Test/urls.py:Django项目的URL声明,就好比网站的目录,注明了哪个url对应什么内容(页面)。详情看:URL调度器
  • Django_Test/wsgi.py:作为Django项目运行在WSGI兼容的web服务器上的入口,详情看:如何使用WSGI进行部署
  • Django_Test/view.py:自己创建的,MVT中的V:接收请求,逻辑处理,返回结果
  • templates:模板,放置返回给浏览器的html文件
五、创建应用

在Django中,每个应用对应一个Python包,并且遵循同样的约定。Django自带一个工具,可以帮助我们自动生成Django应用的基础目录结构,十分方便。

  • 项目和应用的区别
    应用:是一个专门做某件事情的网站应用程序,比如博客系统,或者公共记录的数据库,或者简单的投票程序。
    项目:是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。

  • 现在要创建的应用,会创建在和Django_Test/Django_Test同级的目录,这样子它就可以作为顶级模块导入,而不是Django_Test的子模块
    1.先来到manage.py所处的目录下,然后执行命令:python manage.py startapp polls
    2.创建成功的polls应用:

    polls

    3.注册应用
    Django_Test/Django_Test/settings.py文件注册新增的应用polls

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # 注册子应用
    'polls.apps.PollsConfig'  # 大部分情况简写成'polls'
]

4.编写第一个视图
polls/views.py(管理视图,好比URL对应的内容)
这里添加视图函数
1.第一个参数requestsHttpRquest对象,包含前端用户的所有请求信息。
2.返回值必须是一个HttpResponse对象或者子对象

# 新增如下代码
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse


def index(request):
    return HttpResponse("hello, django.  You're at the polls index.")


def login(request):
    # 可以通过request对象拿到请求的所有数据
    if request.method == 'GET':  # 大写
        return HttpResponse(" You're at the polls login.GET请求")
    elif request.method == 'POST':
        return HttpResponse(" You're at the polls login.POST请求")
    else:
        return HttpResponse(" You're at the polls login.其它请求")

5.编写“目录”
一个view创建后,如果想要起到效果,我们需要创建一个url去映射到这个视图。所以此时我们需要在该polls应用目录下创建一个url声明文件urls.py
5.1.urls.py
PS.实际上,一个项目往往会有多个app,那么Django是如何区分这些app的urlname的呢?这时候可以使用URL conf的命名空间。也就是在各个app的urls.py文件的开头,添加上一个app_name变量来指定该app的命名空间

from django.urls import path

from . import views

## 指定当前应用的命名空间
app_name = 'polls'

urlpatterns = [
    # url路径,所映射的view方法,对应的名称
    path(r'', views.index, name="index"),
    # 注意不需要/
    path(r'login', views.login, name="login"),
]

6.在项目中绑定应用
应用的内容创建完毕,接下来就需要到项目根目录的urls.py文件中去绑定所创建的应用的polls.urls模块
Django_Test/Django_Test/urls.py:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    //  host后面的第一级路径、所映射应用的所有url都在该一级路径下
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls) # 进入localhost:8000/admin会进入Django的admin管理页面
]
  • include()路由转发
    允许引用其它 URLconfs。每当 Django 遇到 :func:~django.urls.include 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。它的设计理念是即插即用,因为一个应用会有多个url和view,所以希望使用include()配置了一条以后,就能够访问该应用下的所有的路径,比如说"/polls/"、"/polls/login"
    什么时候使用include()
    除了admin.site.urls以外,匹配其它url时都应该使用include()

还可以这样灵活使用include()进行路由转发

### 原来的路由配置
from django.urls import path
from . import views

urlpatterns = [
    path('<page_slug>-<page_id>/history/', views.history),
    path('<page_slug>-<page_id>/edit/', views.edit),
    path('<page_slug>-<page_id>/discuss/', views.discuss),
    path('<page_slug>-<page_id>/permissions/', views.permissions),
]

### 优化后
urlpatterns = [
    path('<page_slug>-<page_id>/', include([
        path('history/', views.history),
        path('edit/', views.edit),
        path('discuss/', views.discuss),
        path('permissions/', views.permissions),
    ])),
]

7.访问
http://127.0.0.1:8000/polls/

polls/

http://127.0.0.1:8000/polls/login

polls/login,get请求

六、path函数
  • path()有四个参数,其中两个必填参数:routeview,两个选填参数kwargsname
    1.route:是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。
    2.view:当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。
    3.kwargs:任意个关键字参数可以作为一个字典传递给目标视图函数。
    4.name:给URL 取名能使我们在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许我们只改一个文件就能全局地修改某个 URL 模式。
    5.path函数官方文档
七、类视图
  • 类视图的优点:
    1.代码可读性好
    2.类视图相对于函数视图有更高的复用性,其它类可以通过继承该视图类就可以使用它的方法
  • 例子:(把上面例子中的index修改成类视图)
    1./polls/views.py
from django.http import HttpResponse

from django.views import View


class Index(View):
    """
    类视图,需继承View类
    """

    def get(self, request):
        return HttpResponse("hello, django.  You're at the polls index.==>GET")

    def post(self, request):
        return HttpResponse("hello, django.  You're at the polls index.==>POST")

2.polls/urs.py

from django.urls import path

from . import views

urlpatterns = [
    # 匹配类视图
    path(r'', views.Index.as_view(), name='index')
]

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

推荐阅读更多精彩内容