图
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangodb',
'USER':'root',
'PASSWORD':'123456',
'HOST':'127.0.0.1'
}
}
import pymysql
pymysql.install_as_MySQLdb()
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp'
]
python manage.py makemigrations [appname]
- 在migrations目录生成迁移文件
- 执行迁移
python manage.py migrate [appname]
from myApp.models import Grades,students
from django.utils import timezone
from datetime import *
Grades.objects.all()
grade1 = Grades()
grade1.gname = "python04"
grade1.gdate = datetime(year=2018, month=5, day=3)
grade1.ggirlnum = 3
grade1.gboynum = 70
grade1.save()
grade2.delete()
grade1 = Grades()
stu = Students()
stu.sname = "Leo"
stu.sgender = True
stu.sage = 28
stu.scontend = "I'm Leo"
stu.sgrade = grade1
stu.save()
grade1.students_set.all() 获取python04班级的所有学生
stu3 = grade1.students_set.create(sname="Jack", sgender=True, scontend="I'm Jack", sage=30)
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
admin.site.register(Grades)
admin.site.register(Students)
def gender(self):
if self.sgender:
return "男"
else:
return "女"
gender.short_description = "性别"
actions_on_bottom = True
actions_on_top = False
def index(request):
return HttpResponse("Good Good study, Day Day up!")
def detail(request, num1, num2):
return HttpResponse("detail-{0}-{1}".format(num1, num2))
#mylearn项目urls
urlpatterns = [
url(r'^', include('myApp.urls')),
url(r'^admin/', admin.site.urls),
]
#myApp目录下新建urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index),
url(r'^(\d+)/(\d+)/$', views.detail),
]
#项目settings
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
AutoField(不常用)
CharField(max_length=字符长度)
- 字符串,默认表单样式TextInput
TextField
- 大文本字段,超过4000字节时使用,默认表单样式Textarea
IntegerField
- 整型
DecimalField(max_digits=None, decimal_places=None)
- 浮点型 python的Decimal实例
- max_digits位数总数,decimal_places小数点后数字位数
FloatField
- 浮点型 python的Float实例
BooleanField
- 布尔值 True\False
NullBooleanField
- 布尔值 null\True\False
DateField(auto_now=False, auto_now_add=False)
- python的datetime.date实例
- auto_now保存对象时自动设置字段为当前时间,常用于最后一次修改
- auto_now_add 对象第一次创建时自动设置当前时间
- 对应表单控件TextInput
- auto_now auto_now_add default这些选项是互斥的,不能同时使用
TimeField
- python的datetime.time实例
DatetimeField
- python的datetime实例
FileField
- 文件上传字段
ImageField
- 继承FileField的所有属性和方法,但是对上传的对象校验,确认为image
- 图片上传字段
class Meta():
db_table="" #定义数据表名,不指定时默认为appname_classname
ordering=[id] #对象的默认排序字段,获取对象的列表时使用,升序
ordering=[-id] #同上,降序,排序会增加数据库开销
stu_obj = models.Manager()
class StudentsManager(models.Manager):
def get_queryset(self):
return super(StudentsManager,self).get_queryset().filter(isDelete=False)
字段查询
比较运算符
跨关联查询:处理join查询,模型类名属性名比较运算符
from django.db.models import Max,Min
maxAge = Students.objects.aggregate(Max('sage'))
from django.db.models import F
DEBUG = True #显示调试信息,不会使用404页面
ALLOWED_HOSTS = []
render(request, templateName[ context])
from django.http import HttpResponseRedirect
def redirect1(request):
return HttpResponseRedirect('/redirect2')
#简写
from django.shortcuts import redirect
def redirect2(request):
return redirect('/redirect2')
- 变量:视图传给模板的数据
- {{ var_name }}
- 如果使用的变量不存在,则模板中无返回
- 在模板中使用点语法
- 字典查询
- 对象属性或者对象方法
- 数字索引
- 在模板中使用对象方法
- 在模板中不能传递参数
- 标签
- 语法: {% tag %}
- 作用
1. 在输出中创建文本
2. 控制语句
- if
```
{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
{% else %}
语句3
{% endif %}
```
- for
```
{% for 变量 in 列表 %}
语句1
{% empty %}
语句2
{% endfor %}
```
- {{ forloop.counter }} 当前是第几次循环
- comment 注释多行
```
{% comment%}
注释行
{% endcomment%}
```
- ifequal/ifnotequal 判断是否相等或不等
```
{% isequal value1 value2 %}
语句1
{%%}
```
- include 加载模板并以标签内的参数渲染
```
{% include '模板目录' 参数1 参数2 %}
```
- url 反向解析 {% url 'namespace:name' p1 p2 %}
- csrf_token CSRF保护,跨站请求伪造保护 {% csrf_token %}
- block、extends 用于模板继承
- autoescape 用于HTML转义
- 过滤器
- 作用:在变量显示前修改
- 用法:{{ var|过滤器 }}
- lower
- upper
- 过滤器可以传递参数,参数使用引号括起来
- join {{ list|join:'#'}}
- default 如果变量不存在,或者值为false、空、Null、None,可以使用默认值{{ test|default:'没有'}}
- date 根据给定格式转换日期为字符串, {{ dateVal|date:'y-m-d' }}
- HTML转义 escape
- 加减乘除
```
{{ num|add:10 }} #加
{{ num|add:-10 }} #减
{% num|widthradtio num 1 5 %} #乘
{% num|widthradtio num 5 1 %} #除
```
- 注释
- 单行注释 {# #}
- 多行注释 {# #}
{% block 标签名 %}
{% endblock 标签名 %}
{% autoescape off %}
{{ code }}
{% endautoescape %}
MIDDLEWARE = [
'django.middleware.csrf.CsrfViewMiddleware',]