安裝Django
pip install django==1.9.5
pip install pymysql==0.7.2
命令行工具
where django-admin.py
django-admin // 可輸入命令查看有什么命令參數(shù)
django-admin help startproject // 查看具體命令的作用
django-admin.py startproject hello_django // 創(chuàng)建項目
django-admin.py startapp hello // 創(chuàng)建 app
manage.py runserver [8080] // 運行服務(wù)
manage.py makemigrations // 同步數(shù)據(jù)庫遷移文件
manage.py migrate // 同步數(shù)據(jù)庫
manage.py createsuperuser // 創(chuàng)建超級管理員
manage.py changepassword admin // 改密碼
快速創(chuàng)建一個網(wǎng)頁
- manage.py startapp apphello
- settings.py 加入 app
- 在 views.py 中定義函數(shù)
- urls.py
- template
- static 和 templates 放在根目錄下
我的筆記:
根目錄下創(chuàng)建 static 和 templates 目錄之后
只需一行改變:settings.py -> templates
'DIRS': ['templates'],
# views.py
from django.contrib.auth.models import User
def hello(request):
users = User.objects.all()
return render(request, 'apphello.html', locals())
# apphello.html
{% load static %}
{% static 'semantic/dist/semantic.css' %}
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
mtv 模式
url(r'^', include('apphello.urls')),
urls 詳解
# {'foo': 'bar'}
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
# urls.py
url(r'^test/(?P<id>\d{2})/$',views.test)
# views.py
def test(request,id): // 必須有 id 參數(shù)
pass
views.py 詳解
- request 是 django.http.HttpRequest 的實例
# 屬性
from django.http import HttpRequest, HttpResponse
request.path
request.method
# request.GET 是 QueryDict 對象
request.GET.get('name')
{% csrf_token %}
request.POST.get('name')
request.user
request.session
request.get_full_path()
- 每個 view 必須返回一個 HttpResponse 對象,且該對象系統(tǒng)不會創(chuàng)建
response = HttpResponse('這里是內(nèi)容')
return response
render(request,'temp.html',locals())
render_to_response('temp.html',locals())
redirect(to, permanent=False, *args, **kwargs)
redirect('/some/url/') or redirect('https://example.com/')
數(shù)據(jù)庫配置
- 安裝純 Python 驅(qū)動:在 Pycharm 中搜索 PyMySQL
- 添加代碼:
# 工程目錄的 __init__.py
import pymysql
pymysql.install_as_MySQLdb()
ORM 機制
user_list = User.objects.all()
print(user_list.query)
模型類
# AuthoeDetail
author = models.OneToOneField(Author) // 一對一
# Book
authors = models.ManyToManyField(Author) // 多對多
publisher = models.ForeignKey(Publisher) // 一對多
...
models.CharField
models.EmailField
models.URLField
models.BooleanField
models.DateField
models.DateTimeField
models.DecimalField
models.FileField
models.ImageField
mdoels.TextField
...
max_length, null, blank, choices, default, unique
verbose_name // 后臺顯示名稱艺谆,可以作為第一個參數(shù)计济,省去書寫參數(shù)名(verbose_name)
# 注冊
admin.site.register(Author)
# 模型名稱顯示,通過子類 Meta
class Meta:
verbose_name: '作者'
verbose_name _plural = verbose_name // 復(fù)數(shù)形式
ordering = ['-pub_date'] // 默認排序
# 顯示實例名稱,通過模型方法
def __str__(self):
return self.name