Ctrl + F1  显示错误
Ctrl + Alt + Space  快速导入任意类
Ctrl + /    行注释/取消行注释
Ctrl + Shift + /    块注释
Ctrl + Alt + I    自动缩进
Ctrl + P    参数信息(在方法中调用参数)
Ctrl + D  复制选定的区域或行
Ctrl + Y    删除选定的行
 
 2、查找/替换(Search/Replace)
F3   下一个
Shift + F3   前一个
Ctrl + R   替换
Ctrl + Shift + F   全局查找{可以在整个项目中查找某个字符串什么的,如查找某个函数名字符串看之前是怎么使用这个函数的}
Ctrl + Shift + R   全局替换
 
 
 
 
 
1.form模块
1.1利用 form模块进行验证,可以将定义的类 forms.py里面的字段与数据库的验证的设置为一致(例如定义 LogForm类),在进行数据库查询时可以直接传入字典。
     form=LogForm(request.POST)  # 实例化 LogForm
form = RegForm(request.POST)  # 实例化 LogForm
models.Article.objects.fifter(username=form.get["username"], password=form.get["password"])
models.Article.objects.fifter(**form)  # 这样在后期拓展字段是很方便,注意 form定义的类字段和数据库要一致
 
1.2 form 模块下用内部的 fom.add_error 来自定义错误,如用户名密码在和数据库验证后,不通过,想显示在 password标签,则可写成:
     form.add_error("password","用户名或密码错误") 
 
1.3 利用md5方法对密码进行加密:
 
from django.test import TestCase

# Create your tests here.
import hashlib

def md5(text):
    m=hashlib.md5()
    m.update(text.encode("utf-8")) # 传入的字符串需转换成二进制
    return m.hexdigest()

print(md5("AIF333"))  # 07587025264c9a3bea45cd647f68e649

 
1.4 利用装饰器来进行页面的登录权限控制
 
def auth(func):
    def inner(request,*args,**kwargs): # 由于用户认证有request,需加这个,其他的装饰器一般不需要

##########这里写执行前加的逻辑处理,校验数据库用户信息##########
    ##  user=request.session.get(settings.USER_SESSION_KEY)     ##
    ##  if not user:                                            ##
    ##      return                                              ##
    ##############################################################
        response=func(request,*args,**kwargs)
    ##############################################################
    ##       这里写执行后加的逻辑处理                            ##
    ##############################################################
        return response
    return inner

 
 
2. 在利用session进行用户登录认证时,可以自己定义一个key写入session,但是这个在实际中可能会经常取到,所以最好也放在配置文件里,一般在 settings下
     例如 settings.py里 :配置文件必须大写,否则读不到

# 自定义的session_key
USER_SESSION_KEY="fafdkfjdl"
   
     在别的模块引入settings时需注意,项目里用 django.conf导入,这个会更全
from django.conf import settings # 自定义的 + 整个django框架的其他配置
# from cnblog import settings   # 仅仅 settings.py里的配置
 
 
3.django的生命周期&中间件
   用户请求过来后,先经过中间键来到路由系统,分化到视图函数,经过ORM和模板一起渲染,从视图函数过路由系统经中间件返回到用户;
 
   理解中间件:装饰器是对函数进行装饰的方法,粒度比较细,而中间件则是对整个项目的装饰。配置在settings.py里可以自定义:
 
 
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
 
 
其实有五个方法,最常用的是这两个,process_request可以有返回值,也可以没有,有的化就直接中间件原路返回,后面的例子,中间件实现登录验证
class M1(MiddlewareMixin):
    def process_request(self,request):
        print("中间件1请求")
    def process_response(self,request,response): # 必须要有返回值
        print("中间件1返回")
        return response
 
中间件实现用户页面的校验,将不需要在每个视图函数里加装饰器(如果被中间件拦截了将不会再去走后面的路由,视图了,直接中间间向前返回给用户)例如:
 

 
class M1(MiddlewareMixin):
    def process_request(self,request):
        if request.path_info == "/login": #排除登录页面,否则会重定向过多,死循环;request.path_info是当前的登录路径 
            return None

user=request.session.get(settings.USER_SESSION_KEY) # 中间件实现页面访问控制,对除login页面的其他url都适用
         if not user:
             return redirect("/login")

def process_response(self,request,response): # 必须要有返回值
        print("中间件1返回")
        return response

 
 
4.模板
 
关键字:extends   block
 
注意实际项目中一般模板创建三个:注意 cs的文件引入在头,js的文件引入在尾
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    {% block css %}
    {% endblock %}
</head>
<body>

    {% block bodyhtml %}
    {% endblock %}
   
    {% block js %}
    {% endblock %}
</body>
</html>

 
 
 
 
 
 
5.XSS攻击
通过评论或其他可输入地方,传入html代码(在里面植入破坏的js代码,如获取用户session,传入特定地方),用户在打开网页时会不知不觉的泄露自己的私密数据。
django默认是不将其他输入当做html渲染的,如果自己定义的需要打开: 
1. 在模板中(html)用 |safe 模式
2. 在视图函数,后端处理,用mark_safe模块,这样就可以将html直接在模板渲染

from django.utils.safestring import mark_safe
html="""<a href="#">1</a>
    <a href="#">2</a>
    <a href="#">3</a>"""
safehtml=mark_safe(html)
 
 

django项目实际工作中的配置以及一些有用的小工具(持续更新)的更多相关文章

  1. Django - 日志工作中常用配置

    工作中常用配置 # 日志配置 BASE_LOG_DIR = os.path.join(BASE_DIR, "log") LOGGING = { 'version': 1, # 保留 ...

  2. vue+webpack项目实际工作中需要生成一个配置文件供生产环境使用

    大家都知道webpack打包十分方便,但是在工作中,前端写好的项目需要后端进行部署,就需要有一个配置文件. 使用插件 :  GenerateAssetPlugin , 使用方法 : 1  在项目中安装 ...

  3. django项目settings.py的基础配置

    一个新的django项目初始需要配置settings.py文件: 1. 项目路径配置 新建一个apps文件夹,把所有的项目都放在apps文件夹下,比如apps下有一个message项目,如果不进行此项 ...

  4. Django项目发布到Apache2.4配置mod_wsgi,解决遭遇的各种坑。

    环境: Apache2.4 32bit Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:05:16) [MSC v.1915 32 bit (Inte ...

  5. Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)

    摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...

  6. Django:总结setting中的配置

    一.Django setting配置说明 二.setting配置一览 一.Django setting配置说明 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包 ...

  7. 创建Django项目(二)——数据库配置

    2013-08-05 20:53:44|          1.数据库配置         举例是用MySQL数据库,首先在settings文件中做配置,如下: DATABASES = {     ' ...

  8. Mysql注入小tips --持续更新中

    学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...

  9. Django项目连接多个数据库配置

    1.设置数据库连接 pip install PyMySQL 2.在项目同名目录myproject/myproject下的__init__.py添加以下代码 import pymysql pymysql ...

随机推荐

  1. git本地项目上传至码云gitee

    如果你的本机是安装成功第一次使用,先配置一下一些基本的信息 $ git config--global user.name "Your Name" $ git config --gl ...

  2. ios 运行时特征,动态改变控件字体大小

    需求:ex: 在不同尺寸的iPhone上面显示的字体大小不一样 https://github.com/rentzsch/jrswizzle #import <UIKit/UIKit.h> ...

  3. 一起学爬虫——使用Beautiful Soup爬取网页

    要想学好爬虫,必须把基础打扎实,之前发布了两篇文章,分别是使用XPATH和requests爬取网页,今天的文章是学习Beautiful Soup并通过一个例子来实现如何使用Beautiful Soup ...

  4. java代码获取多边形的中心点

    package com.skjd.util; import java.util.ArrayList; import java.util.List; /** * 坐标以及电子围栏相关的工具类 * @au ...

  5. C# 集合已修改 可能无法执行枚举操作 zz

    今天编写程序时 修改了list集合 在foreach时报 “集合已修改:可能无法执行枚举操作.”错误. 首先想到的是没有锁定集合对象. 增加了 private readonly object sync ...

  6. bzoj3124: [Sdoi2013]直径 树形dp two points

    题目链接 bzoj3124: [Sdoi2013]直径 题解 发现所有直径都经过的边 一定在一条直径上,并且是连续的 在一条直径上找这段区间的两个就好了 代码 #include<map> ...

  7. django——url(路由)配置

    URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除此之外的任何URL都不被 ...

  8. Android的Launcher启动流程 “Launcher部分启动流程”

    研究代码从:AndroidManifest.xml.自定义的Application.java开始. Android系统启动时,系统需要一个Home应用程序来负责将这些应用程序展示出来:也就是该应用的目 ...

  9. jupyter notebook 远程访问

    https://www.youtube.com/watch?v=LpQl0yeZzCU 在服务器端执行: jupyter notebook --ip 服务器的Ip地址 --allow-root --n ...

  10. js 对时间进行判断 现在的时间是否在后台给的开始时间 和 结束时间 内 (时间格式为:2018-09-03 09:20:30)

    function status(item){ let now = Date.parse(new Date()); let startString = Date.parse(new Date(Date. ...