一、安装
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开发工具来创建项目
- win7+pycharm+django创建helloworld项目
- win7+pycharm+django创建helloworld项目(2)
- win7+pycharm+django创建helloworld项目(3)
二、静态资源文件
在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框架
下篇: