安装Django
pip install django==1.9.5
pip install pymysql==0.7.2
命令行工具
where django-admin.py
django-admin // 可输入命令查看有什么命令参数
django-admin help startproject // 查看具体命令的作用
django-admin.py startproject hello_django // 创建项目
django-admin.py startapp hello // 创建 app
manage.py runserver [8080] // 运行服务
manage.py makemigrations // 同步数据库迁移文件
manage.py migrate // 同步数据库
manage.py createsuperuser // 创建超级管理员
manage.py changepassword admin // 改密码
快速创建一个网页
- manage.py startapp apphello
- settings.py 加入 app
- 在 views.py 中定义函数
- urls.py
- template
- static 和 templates 放在根目录下
我的笔记:
根目录下创建 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 参数
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 对象,且该对象系统不会创建
response = HttpResponse('这里是内容')
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/')
数据库配置
- 安装纯 Python 驱动:在 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 // 后台显示名称,可以作为第一个参数,省去书写参数名(verbose_name)
# 注册
admin.site.register(Author)
# 模型名称显示,通过子类 Meta
class Meta:
verbose_name: '作者'
verbose_name _plural = verbose_name // 复数形式
ordering = ['-pub_date'] // 默认排序
# 显示实例名称,通过模型方法
def __str__(self):
return self.name