Django 入门教程笔记(一)

安装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 分组
url(r'^', include('apphello.urls')),

urls 详解

  • 官方文档
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
  • 传送额外参数
# {'foo': 'bar'}
url(r'^blog/(?P[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
  • 正在表达式在 url 中的作用
# urls.py
url(r'^test/(?P\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 机制

  • 查看 SQL 语句 : 通过 query 属性
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

你可能感兴趣的:(Django 入门教程笔记(一))