3. 初识 Django

版权声明:欢迎大家交流学习,如果您有好的意见或者建议,请及时留言 https://blog.csdn.net/qq_26460841/article/details/88941544

一、安装

1.1 使用命令行安装

打开命令行,切换到你自己想存放项目的目录:

安装Django,这个过程是联网下载,请保持电脑网络连接畅通。(建议升级一下pip3,命令python -m pip install --upgrade pip

  • pip3 install django
H:\u\a>pip3 install django
Collecting django
  Using cached https://files.pythonhosted.org/packages/c7/87/fbd666c4f87591ae25b
7bb374298e8629816e87193c4099d3608ef11fab9/Django-2.1.7-py3-none-any.whl
Collecting pytz (from django)
  Downloading https://files.pythonhosted.org/packages/61/28/1d3920e4d1d50b19bc5d
24398a7cd85cc7b9a75a490570d5a30c57622d34/pytz-2018.9-py2.py3-none-any.whl (510kB
)
    40% |█████████████                   | 204kB 80kB/s eta 0:00:04
    42% |█████████████▌                  | 215kB 61kB/s eta 0:00:0
    44% |██████████████                  | 225kB 62kB/s eta 0:00:0
    46% |███████████████                 | 235kB 63kB/s eta 0:00:
    48% |███████████████▌                | 245kB 57kB/s eta 0:00
    50% |████████████████                | 256kB 65kB/s eta 0:00
    52% |█████████████████               | 266kB 123kB/s eta 0:
    54% |█████████████████               | 276kB 99kB/s eta 0:0
    56% |██████████████████              | 286kB 82kB/s eta 0:
    58% |██████████████████▌             | 296kB 61kB/s eta 0
    60% |███████████████████             | 307kB 65kB/s eta 0
    62% |████████████████████            | 317kB 74kB/s eta
    64% |████████████████████▌           | 327kB 64kB/s eta
    66% |█████████████████████           | 337kB 71kB/s eta
    68% |██████████████████████          | 348kB 66kB/s et
    70% |██████████████████████▌         | 358kB 66kB/s e
    72% |███████████████████████         | 368kB 53kB/s e
    74% |████████████████████████        | 378kB 59kB/s
    76% |████████████████████████▌       | 389kB 53kB/s
    78% |█████████████████████████       | 399kB 64kB/s
    80% |█████████████████████████▌      | 409kB 56kB/
    82% |██████████████████████████      | 419kB 63kB/
    84% |███████████████████████████     | 430kB 60kB
    86% |███████████████████████████▌    | 440kB 60k
    88% |████████████████████████████    | 450kB 52k
    90% |█████████████████████████████   | 460kB 51
    92% |█████████████████████████████▌  | 471kB 6
    94% |██████████████████████████████  | 481kB 6
    96% |███████████████████████████████ | 491kB
    98% |███████████████████████████████▌| 501kB
    100% |████████████████████████████████| 512k
B 49kB/s
Installing collected packages: pytz, django
Successfully installed django-2.1.7 pytz-2018.9

安装成功后,在你安装的python解释器下,会出现django字样:

创建项目:

  • django-admin startproject mysit

输入命令,然后我们可以查看我们创建的项目的构成:

  • 输入tree /F可以查看项目的文件树结构:

创建应用:

  • python mannage.py startapp  app01

创建应用后,我们的项目树结构得到了丰富:

启动项目:

  • python manage.py runserver  127.0.0.1:8090

在浏览器端输入地址,可查看效果:

1.2 使用pycharm开发工具来创建项目

之前写过,这里给出链接: 

二、静态资源文件

在Django中,一般将这些静态文件放在static目录中。有两种方式。一:在主项目路径下,建立static文件。二、在所建立的应用下建立static文件。

只是其应用文件有一点点区别

首先看在主路径下建立static文件的配置:

在settings.py中可以看见下面的内容:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'     #别名

我们在主目录下建立了static,接着我们需要建立连接关系:

在settings.py文件中,结果如下:

STATIC_URL = '/static/'


STATICFILES_DIRS=(
    os.path.join(BASE_DIR, 'static'),
)

然后在HTML中应用:

<link rel="stylesheet" href="/static/test.css">   <!---注意:是/static-->

就可以看见效果了。

然后是在应用下使用static文件:

settings.py中添加条目:

STATIC_URL = '/static/'


STATICFILES_DIRS=(
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'blog' , 'static'),  #新增条目,注意末尾有,
    #等价于:os.path.join(BASE_DIR, 'blog/static'),
)

接着在HTML中应用:

<script src="/static/home.js"></script>

同样的保存后,测试。可以发现alert窗口。

注:/static/home.js这种引用方式并不好

我们在使用的时候,可能有多处都是/static/……来引入外部的静态文件,如果我们需要修改文件夹名称的时候,不能很好的修改。

这里我们可以采用动态载入:

在需要调用外部的静态资源文件的HTML中:

{% load staticfiles %}
<script src={% static "home.js" %}></script>

解释:

STATIC_URL = '/static/'

三、URL路由匹配

有两种方式:一、使用path。二、使用url。

在urls.py文件中,是路由条目:

from django.contrib import admin
from django.conf.urls import url
from django.urls import path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', views.blog),
    url(r'^article/(\d{4})', views.article_year)  #正则匹配
    #(\d{4})括号是分组,\d{4}表示四位数的数字;注:需要分组才能获取参数
]

或者:

from django.urls import path,re_path
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^article/(\d{4})', views.article_year),#也可以用于匹配正则
]

我们下面用ctrl和鼠标,简答的查看path和rul的原型函数:

path = partial(_path, Pattern=RoutePattern)
def url(regex, view, kwargs=None, name=None)

不难看出,path是直接的路径匹配;url可以做正则表达式

然后需要注意的是,正则中匹配的参数是传给后面的article_year函数的,所以在函数定义的时候,需要定义个形参去接收,然后使用。

def article_year(request, year):
    return HttpResponse(year)        #return HttpResponse可以追踪查看render返回的也是该对象

下面我们来看看路由匹配中的正则表达式部分:

正则[ 有名 - 无名] 分组格式

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', views.blog),
    # ^以固定头开始,$固定尾结尾的
    re_path(r'^articles/2003/$',views.special_case_2003),  

    #  带一个参数    无名分组
    #  注意!以分组形式的正则会把,分组得到的值以参数形式,传给视图(再request之后)
    re_path(r'^articles/([0-9]{4})/$',views.year_archive),


    # 两个参数,自定义名传参 格式:  ?P<参数名>    有名分组  
    # !视图收参,必须是<>设置的名字 
    re_path(r'articles/(?P<y>[0-9]{4})/(?P<m>[0-9]{2})$',views.month_archive)
]


在views.py中:
def special_case_2003(request):
    return HttpResponse("2003")

def year_archive(request, year):
    return HttpResponse(year)

def month_archive(request, y, m):
    return HttpResponse("year: %s  month: %s" % (y, m))

URL中的别名name:

urlpatterns = [
    path('admin/', admin.site.urls),

    path('blog/', views.blog, name='bl'),  #将blog的别名设置为bl
]

设置别名,方便以后再页面中链接不用逐一修改。

在HTML中引用如下:

<head>
    {% load staticfiles %}
</head>
<body>
    <h1>this is my blog.</h1>
    <form action="{% url 'bl' %}" method="get">  #这里是引用
        <p>用户名:<input type="text" name="username"></p>
        <p><input type="submit" value="提交"></p>
    </form>
</body>

四、URL每个应用下自己指派URL,全局URL只做分发

如我们应用blog下,我们应该建立一个urls.py的文件,然后指派自己的url转发表:

新建blog->urls.py

from django.urls import path,re_path
from blog import views


urlpatterns = [
    re_path(r'^articles/2003/$', views.special_case_2003),
    re_path(r'^articles/([0-9]{4})/$', views.year_archive),
    re_path(r'articles/(?P<y>[0-9]{4})/(?P<m>[0-9]{2})$', views.month_archive),
]

然后,在主urls.py的文件中,应用:

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


urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
]

也就是,以blog开头的都到blog.urls文件中去找。

如使用下面的链接访问:http://127.0.0.1:8080/blog/articles/2003/02


参考:http://www.liujiangblog.com/blog/36/

参考:http://www.cnblogs.com/yuanchenqi/articles/6083427.html


作者:无涯明月

上篇:2. web框架

下篇:

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/88941544