Django cheat sheet
1、通过创建一个新的 virtualenv 为部署 Django 应用程序设置环境:
mkvirtualenv DjangoApp
要退出新的 virtualenv,请使用 deactivate。您可以使用 workon 在环境之间切换。要加载或在 virtualenv 之间切换,请使用 workon 命令:
workon DjangoApp
在您的当前环境中安装 Django
pip install Django
2、使用 django-admin 命令创建项目
django-admin startproject demoproject
3、进入demo project文件夹,使用python manage.py startapp 创建应用.
cd demoproject
python manage.py startapp demoapp
4、测试项目服务器,Ctrl+C退出服务器。
python manage.py runserver
或者指定服务器ip和端口。
python manage.py runserver 0.0.0.0:8000
5、创建超级用户用于登陆django admin后台管理平台。
python manage.py createsuperuser admin
6、编辑设置文件和项目相关文件。
settings.py 控制项目参数。
1 | INSTALLED_APPS = [ |
urls.py 控制访问请求路径
from django.conf.urls import url
from django.contrib import admin
from demoproject.views import hello
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^hello/$', hello),
]
views.py 控制访问请求的应答
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
demoapp/models.py 控制数据结构(表格、变量、变量属性)
1 | from __future__ import unicode_literals |
demoapp/admin.py 控制后台注册和数据呈现
1 | from __future__ import unicode_literals |
7、当你修改models.py时,需要通过makemigrations将修改反应到数据库中去。
python manage.py makemigrations
python manage.py migrate
8、利用template来呈现页面。
首先要修改settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
# ...
接下来建文件夹templates
\demoproject
\demoproject
\demoapp
\templates
manage.py
修改demoproject\views.py
from django.shortcuts import render
import datetime
def current_datetime(request):
now = datetime.datetime.now()
return render(request, 'current_datetime.html', {'current_date': now})
在templates文件夹,新建html模版文件current_datetime.html。
\mysite_project\mysite\templates\current_datetime.html
1 | {% raw %} |
模版的继承,比如我们建一个地层模版,然后在这个模版的基础上加载子模版,这样就可以避免重复。
参考:https://djangobook.com/templates-in-views/
base.html
1 | {% raw %} |
current_datetime.html
1 | {% raw %} |
hours_ahead.html
1 | {% raw %} |
9、利用form来获取用户数据。
mysite_project\mysite\books\templates\books\search_form.html
1 | {% raw %} |
mysite\books\urls.py
1 | from django.conf.urls import url |
mysite\urls.py
1 | from django.conf.urls import include, url |
books\views.py
from django.shortcuts import render
def search_form(request):
return render(request, 'books/search_form.html')
def search(request):
if 'q' in request.GET:
message = 'You searched for: %r' % request.GET['q']
else:
message = 'You submitted an empty form.'
return HttpResponse(message)
参考:https://djangobook.com/django-forms/
定义表单类,更简洁的获取用户数据的方法。
mysite_project\mysite\mysite\forms.py
1 | from django import forms |
mysite_project\mysite\mysite\views.py
1 | from django.http import Http404, HttpResponse, HttpResponseRedirect |
mysite_project\mysite\templates\contact_form.html
1 | {% raw %} |
10、urls进阶
\urls.py
from django.conf.urls import include, url
from . import views
urlpatterns = [
url(r'^hello/$', views.hello),
url(r'^time/$', views.current_datetime),
url(r'^time/plus/(d{1,2})/$', views.hours_ahead),
]
\urls.py
from django.conf import settings
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.homepage),
url(r'^(\d{4})/([a-z]{3})/$', views.archive_month),
]
if settings.DEBUG:
urlpatterns += [url(r'^debuginfo/$', views.debug),]
\urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^reviews/2003/$', views.special_case_2003),
url(r'^reviews/([0-9]{4})/$', views.year_archive),
url(r'^reviews/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^reviews/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.review_detail),
]