app.models.pyhtml
class Foo: xx= 字段(数据库数据类型) 字段类型 字符串 EmailField(CharField): IPAddressField(Field) URLField(CharField) SlugField(CharField) UUIDField(Field) FilePathField(Field) FileField(Field) ImageField(FileField) CommaSeparatedIntegerField(CharField) 时间类: models.DateTimeField(null=True) 数字: num = models.IntegerField() num = models.FloatField() mum = models.DecimalField(max_digits=30,decimal_places=10) 枚举(Django): color_list = ( (1,'黑色'), (2,'白色'), (3,'蓝色') ) color = models.IntegerField(choices=color_list) 1. 本身操做: 本身取,本身用 2. 给Django admin使用 应用场景:选项固定 PS: FK选项动态 字段参数 null 数据库中字段是否能够为空 db_column 数据库中字段的列名 default 数据库中字段的默认值 primary_key 数据库中字段是否为主键 db_index 数据库中字段是否能够创建索引 unique 数据库中字段是否能够创建惟一索引 unique_for_date 数据库中字段【日期】部分是否能够创建惟一索引 unique_for_month 数据库中字段【月】部分是否能够创建惟一索引 unique_for_year 数据库中字段【年】部分是否能够创建惟一索引 verbose_name Admin中显示的字段名称 blank Admin中是否容许用户输入为空 editable Admin中是否能够编辑 help_text Admin中该字段的提示信息 choices Admin中显示选择框的内容,用不变更的数据放在内存中从而避免跨表操做 如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1) error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息; 字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date 如:{'null': "不能为空.", 'invalid': '格式错误'} validators 自定义错误验证(列表类型),从而定制想要的验证规则 from django.core.validators import RegexValidator from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\ MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator 如: test = models.CharField( max_length=32, error_messages={ 'c1': '优先错信息1', 'c2': '优先错信息2', 'c3': '优先错信息3', }, validators=[ RegexValidator(regex='root_\d+', message='错误了', code='c1'), RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'), EmailValidator(message='又错误了', code='c3'), ] )
pub.htmlpython
<div> <h3>特别漂亮的组件</h3> <div class="title">标题:{{ name }}</div> <div class="content">内容:{{ name }}</div> </div>
test.htmlgit
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> {% include 'pub.html' %} {% include 'pub.html' %} {% include 'pub.html' %} </body> </html>
PS: 模板中传入函数 会自动执行数据库
模版的建立过程,对于模版,其实就是读取模版(其中嵌套着模版标签),而后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。django
模板中也有本身的语言,该语言能够实现数据展现浏览器
{{ item }} {% for item in item_list %} <a>{{ item }}</a> {% endfor %} forloop.counter forloop.first forloop.last {% if ordered_warranty %} {% else %} {% endif %} 母板:{% block title %}{% endblock %} 子板:{% extends "base.html" %} {% block title %}{% endblock %} 帮助方法: {{ item.event_start|date:"Y-m-d H:i:s"}} {{ bio|truncatewords:"30" }} {{ my_list|first|upper }} {{ name|lower }}
a、在app中建立templatetags模块缓存
b、建立任意 .py 文件,如:xx.py服务器
#!/usr/bin/env python #coding:utf-8 from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def my_simple_time(v1,v2,v3): return v1 + v2 + v3 @register.simple_tag def my_input(id,arg): result = "<input type='text' id='%s' class='%s' />" %(id,arg,) return mark_safe(result)
c、在使用自定义simple_tag的html文件中导入以前建立的 xx.py 文件名cookie
{% load xx %}
d、使用simple_tagsession
{% my_simple_time 1 2 3%} {% my_input 'id_username' 'hide'%}
e、在settings中配置当前app,否则django没法找到自定义的simple_tag
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', )
Cookie是什么:保存在客户端浏览器上的键值对
Session是什么:
保存在服务器端的数据(本质是键值对)
应用:依赖cookie
做用:保持回话(Web网站)
基于session完成简单的登录验证
def login(request): if request.method == 'GET': return render(request, 'login.html') else: u = request.POST.get('user') p = request.POST.get('pwd') if u == 'alex' and p =='123': # 1.生成随机字符串 # 2.经过cookie发送给客户端 # 3.服务端保存Session{随机字符串:{'用户信息'}} # { 随机字符串:{'username':'alex',} } request.session['username'] = 'alex' # nnesu1uu93qw241i4lyykk34pngvv38h return redirect('/index/') else: return render(request,'login.html',{'msg':'用户名密码错误'}) def index(request): # 1.获取客户端cookie中的随机字符串 # 2.去session中查找有没有随机字符串 # 3.去session对应key的value中查看是否有username v = request.session.get('username') if v: return HttpResponse('登录成功: %s' % v ) else: return redirect('/login/')
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:
settings.py
# Session 配置 # 缓存Session # SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 # SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也能够是memcache),此处别名依赖缓存的设置 # 文件Session # SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 # SESSION_FILE_PATH = None # 缓存文件路径,若是为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 缓存+数据库Session # SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 # 加密cookie Session(至关于本身写加密Cookie) # SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名 SESSION_COOKIE_SECURE = False # 是否Https传输cookie SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过时 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改以后才保存
def index(request): # 获取、设置、删除Session中数据 request.session['k1'] request.session.get('k1',None) request.session['k1'] = 123 request.session.setdefault('k1',123) # 存在则不设置 del request.session['k1'] # 全部 键、值、键值对 request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems() # 用户session的随机字符串 request.session.session_key # 将全部Session失效日期小于当前日期的数据删除 request.session.clear_expired() # 检查 用户session的随机字符串 在数据库中是否 request.session.exists("session_key") # 删除当前用户的全部Session数据 request.session.delete("session_key") request.session.set_expiry(value) * 若是value是个整数,session会在些秒数后失效。 * 若是value是个datatime或timedelta,session就会在这个时间后失效。 * 若是value是0,用户关闭浏览器session就会失效。 * 若是value是None,session会依赖全局session失效策略。