python/数据库操作补充—模板—Session

一、创建一个app目录

在models.py只能类进行进行创建表

 1 class Foo:
 2                     xx= 字段(数据库数据类型)
 3                         字段类型
 4                             字符串
 5                                 EmailField(CharField):
 6                                 IPAddressField(Field)
 7                                 URLField(CharField)
 8                                 SlugField(CharField)
 9                                 UUIDField(Field)
10                                 FilePathField(Field)
11                                 FileField(Field)
12                                 ImageField(FileField)
13                                 CommaSeparatedIntegerField(CharField)
14                             时间类:
15                                 models.DateTimeField(null=True)
16                             数字:
17                                 num = models.IntegerField()
18                                 num = models.FloatField()
19                                 mum = models.DecimalField(max_digits=30,decimal_places=10)
20                             枚举(Django):
21                                 color_list = (
22                                     (1,'黑色'),
23                                     (2,'白色'),
24                                     (3,'蓝色')
25                                 )
26                                 color = models.IntegerField(choices=color_list)

class Foo

二、字段参数

字段参数

1 字段参数:
2     null=True,              允许为空
3     default='1111',       设置默认值
4     db_index=True,      设置索引
5     unique=True           设置唯一索引

字段参数 演示

三、创建索引

创建索引
class Meta:# unique_together = (#     ('email','ctime'),                创建联合唯一索引# )                                   # index_together = (#     ('email','ctime'),                创建联合索引# )

四、DjangoAdmin提供的参数  

DjangoAdmin提供的参数:verbose_name   Admin中显示的字段名称blank               Admin中是否允许用户输入为空editable            Admin中是否可以编辑help_text       Admin中该字段的提示信息choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作                                                如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

自定义错误类型

1 error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
2                                                     字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
3                                                     如:{'null': "不能为空.", 'invalid': '格式错误'}
4
5 有些是不能进行自定义

自定义错误类型 演示

validators          自定义错误验证(列表类型),从而定制想要的验证规则

 1                                 validators          自定义错误验证(列表类型),从而定制想要的验证规则
 2                                                     from django.core.validators import RegexValidator
 3                                                     from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\
 4                                                     MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
 5                                                     如:
 6                                                         test = models.CharField(
 7                                                             max_length=32,
 8                                                             error_messages={
 9                                                                 'c1': '优先错信息1',
10                                                                 'c2': '优先错信息2',
11                                                                 'c3': '优先错信息3',
12                                                             },
13                                                             validators=[
14                                                                 RegexValidator(regex='root_\d+', message='错误了', code='c1'),
15                                                                 RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),
16                                                                 EmailValidator(message='又错误了', code='c3'), ]
17
18 a. 直接通过(因为数据库可以不添加数据)
19                             models.Userinfo.objects.create(....)
20 -- ModelForm
21
22 b. 影响Django自带的管理工具admin

自定义错误验证 演示

五、模板

1、模版的执行

模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

1 def current_datetime(request):
2     now = datetime.datetime.now()
3     html = "<html><body>It is now %s.</body></html>" % now
4     return HttpResponse(html)

View Code

1 from django import template
2 t = template.Template('My name is {{ name }}.')
3 c = template.Context({'name': 'Adrian'})
4 print t.render(c)

View Code

 1 import datetime
 2 from django import template
 3 import DjangoDemo.settings
 4
 5 now = datetime.datetime.now()
 6 fp = open(settings.BASE_DIR+'/templates/Home/Index.html')
 7 t = template.Template(fp.read())
 8 fp.close()
 9 html = t.render(template.Context({'current_date': now}))
10 return HttpResponse(html

View Code

 1 from django.template.loader import get_template
 2 from django.template import Context
 3 from django.http import HttpResponse
 4 import datetime
 5
 6 def current_datetime(request):
 7     now = datetime.datetime.now()
 8     t = get_template('current_datetime.html')
 9     html = t.render(Context({'current_date': now}))
10     return HttpResponse(html)

View Code

1 return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))

View Code

2、模版语言

 模板中也有自己的语言,该语言可以实现数据展示

{{ item }}
{% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}forloop.counterforloop.firstforloop.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 }} 

3、自定义simple_tag

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.py

#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_saferegister = 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 文件名

1
{% load xx %}

d、使用simple_tag

1
2
{% 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',
)

六、Session

Session是什么?
Session 是保存在服务端的数据
Cookie是什么?
Cookie是保存在客户端浏览器上的键值对

Session个人理解 

个人Session理解说明:
Session就是在存再服务端的数据,每次有人来访问网页Session会检测用户是否带Session发送的随机字符串,如果有随机字符串Session就自己会查看自己以字典形式保存在内存的数据,字典键就是Session生成的随机字符串,字典的值就是用户的信息。
整体总结:
Session是依赖于Cookie的一种会话保持,Session会向第一次成功访问的用户发送一个随机的字符串,以便以后用户登录可以准确的定位到用户是谁,用户的相关信息。
需要注意一点,每个用户之间都是独立的字典,不会出现用户信息混乱状况,使用Session的好处,用户查看不到敏感信息

个人Cookie理解说明:
Cookie是存在客户端浏览器上的键值对
Cookie的可以用于用户登录验证,投票
整体总结:
Cookie会向第一次成功登陆页面的用户发送一个键值对,如果下次登陆服务端会检测用户是否携带Cookie如果携带就可以直接进行访问不需要再进用户验证。
Cookie可以设置过期时间 和哪些用户可以进行访问

Session 保存在服务端的数据(本质是键值对)

配置文件中可以指定存储位置

数据库 Session

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。a. 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)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,默认修改之后才保存(默认)b. 使用def index(request):# 获取、设置、删除Session中数据request.session['k1']request.session.get('k1',None)request.session['k1'] = 123request.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失效策略。

缓存Session

a. 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名SESSION_COOKIE_SECURE = False                             # 是否Https传输cookieSESSION_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,默认修改之后才保存b. 使用同上

文件Session

a. 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                                            # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/TSESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名SESSION_COOKIE_SECURE = False                               # 是否Https传输cookieSESSION_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,默认修改之后才保存b. 使用同上

缓存+数据库Session

数据库用于做持久化,缓存用于提高效率a. 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎b. 使用同上缓冲+数据库  先是去数据库中查找,没有就去数据库中查找

Cookie 中存放Session

a. 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎b. 使用同上这样的存放方式  相当于没有使用Session

Session 用户验证

1 def login(func):
2     def wrap(request, *args, **kwargs):
3         # 如果未登陆,跳转到指定页面
4         if request.path == '/test/':
5             return redirect('http://www.baidu.com')
6         return func(request, *args, **kwargs)
7     return wrap

用户验证

 

 

转载于:https://www.cnblogs.com/guobaoyuan/p/7095107.html

python/数据库操作补充—模板—Session相关推荐

  1. Python数据库操作【三】—— SQLServer

    SQLServer简介 以下摘自百度百科: SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft.Sybase和Ashton-Tate三家 ...

  2. python数据库操作——连接SQLite

    python数据库操作--连接SQLite   hello!我是wakeyo_J,每天一个konwledge point,一起学python,让技术无限发散. 连接SQLite python数据库操作 ...

  3. 27.Python数据库操作(一)【内置数据库SQLite和ORM框架SQLAlchemy】

    目录: 每篇前言: Python数据库操作(一) 1.1 SQLite 1.2 ORM框架SQLAlchemy 每篇前言:

  4. python数据库操作之pymysql模块和sqlalchemy模块(项目必备)

    pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...

  5. python数据库操作框架_python bottle 框架操作数据库

    python操作mysql数据库用MySQLdb模板,操作postgresql则用psycopg2模块 安装MySQLdb(用yum安装,好像只能与mysql5.1版本配合使用):yum instal ...

  6. python数据库操作实例

    本篇文章主要讲解python3.9.6下数据库的链接和查询数据的方法 前置环境需要安装mysql和json两个模块,引入方式为import 模块名,不懂的朋友可以先看<python小白操作入门教 ...

  7. python数据库操作sqlite_Python3操作SQLite数据库

    Python3操作SQLite数据库 SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目 ...

  8. python 数据库操作 yeild from_Python数据库连接关闭

    连接具有PEP-249(Python数据库API规范v2.0)中指定的csr.close()方法: import pyodbc conn = pyodbc.connect('DRIVER=MySQL ...

  9. Python数据库操作之ORM框架

    前言 之前在github上下载开源项目,里面使用到SQLAlchemy框架,现在想研究一下具体实现 介绍 基本的操作数据库是Mysql官方的MySQL-connector驱动,来完成数据库的连接和使用 ...

最新文章

  1. JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
  2. K8s 工程师必懂的 10 种 Ingress 控制器
  3. 适用于单片机的数据加密算法:xxtea
  4. 今日代码(200924)--缺失值处理
  5. Windows如何开启虚拟化,以安装虚拟机?
  6. Java9中使用jpa,jpa – eclipselink在Java 9上使用final字段进行静态编织
  7. 机器学习基础笔记总结
  8. jQuery的操作css的几种方法和位置,尺寸以及scrolltop方法
  9. 解决由于sz rz导致抓包时文件容量增加
  10. solaris如何启动ssh服务
  11. sublime text3 Package Control 插件安装及推荐(MAC)
  12. centos7搭建nexus maven私服
  13. debloater手机版apk_会议管家apk下载-会议管家云平台v1.0.0手机版下载
  14. [Sencha ExtJS amp; Touch] 在Sencha(Extjs/Touch)应用程序中使用plugins(插件)和mixins(混入)...
  15. springboot Basic Auth 暴露API 访问认证
  16. Meta-learning algorithms for Few-Shot Computer Vision 论文解读(二)
  17. namenode 格式化 -format
  18. 乱七八糟的pwn入门(六)——5.passcode
  19. 入门学习UI设计有哪些就业方向?
  20. 照片美妆--人像变老算法研究

热门文章

  1. linux dlopen 源码,采用dlopen、dlsym、dlclose加载动态链接库
  2. AcWing 1270. 数列区间最大值(RMQ问题)
  3. AcWing 4247. 糖果(差分约束最短路)
  4. php yii composer,yii2怎么用composer生成一个应用?
  5. java面试题学生表成绩表老师表_SQL经典学生老师成绩表面试题
  6. Spark稀疏向量和稠密向量
  7. [USACO13MAR]Poker Hands【贪心】
  8. 因果推断与反事实预测——几篇关联论文(二十六)
  9. tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构与相关报错
  10. R︱Rstudio 1.0版本尝鲜(R notebook、下载链接、sparkR、代码时间测试profile)