pip3 install django //下载Django
py -m django --version //检查安装版本
django-admin startproject mysite //mysite是项目名
//在windows的cmd中输入django-admin startproject project时报错:'django-admin' 不是内部或外部命令,也不是可运行的程序 或批处理文件。这是因为系统缺少django的环境变量。
首先找到Python\Scripts\django-admin.exe的位置
然后在环境变量的path中追加django-admin.exe得路径
mysite/
manage.py //一个让你用各种方式管理 Django 项目的命令行工具。
mysite/
__init__.py
settings.py //Django 项目的配置文件
urls.py //Django 项目的 URL 声明,路径与视图的映射
wsgi.py //作为你的项目的运行在 WSGI 兼容的Web服务器上的入口
python manage.py startapp app01
app01/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py //视图函数
py manage.py runserver 8080
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles//' , views.year_archive) //分组传参数
]
要从URL捕获值,请使用尖括号。
捕获的值可以选择包括转换器类型。例如,用于 <int:name>捕获整数参数。如果未包含转换器/,则匹配除字符之外的任何字符串。
没有必要添加前导斜杠,因为每个URL都有。例如,它articles不是/articles。
使用正则表达式,导入re_path()而不是path()。
from django.urls import path, re_path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P[0-9]{4})/$' , views.year_archive), //命名组语法
re_path(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/$' , views.month_archive)
]
在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。
捕获的值作为关键字参数而不是位置参数传递给视图函数。
from django.urls import path,include
from . import views
urlpatterns = [
path('', main_views.homepage),
path('app01/', include('app01.urls'))
//路径app01/timer 先在urls中匹配app01,然后再去app01中的urls匹配剩余部分
]
Django提供了用于执行URL反转的工具,这些工具匹配需要URL的不同层:
在模板中:使用url模板标记。
在Python代码中:使用该reverse()函数。
在与处理Django模型实例的URL相关的更高级代码中:该get_absolute_url()方法。
#urls
from django.urls import path
from . import views
urlpatterns = [
path('articles//' , views.year_archive, name='news-year-archive'),
]
#模板代码中
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a> //!!!{% url 'name'%}
{# Or with the year in a template context variable: #}
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
#python
from django.http import HttpResponseRedirect
from django.urls import reverse
def redirect_to_year(request):
# ...
year = 2006
# ...
return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))