实用技巧(掉进去又爬出来的坑儿)

1.将字符型的字段转化为整形进行排序


1     # Django实现将字符型的字段转化为整形进行排序

2     # mysql数据库(不同的数据库会有迁移问题)

3     # Goods:模型类

4     # productnum:销量

5     # extra:一个Django的拓展查询方法,参数select是个字典

6     goods = Goods.objects.extra(select={‘p‘: ‘productnum+0‘})

7     goods = goods.extra(order_by=["p"])  # -p则为倒序

8

9     # 相当于sql语句

10 SELECT *,productnum+0 AS p FROM goods ORDER BY p

2.ajax的post请求(py3.5+dj1.11)

  • 数据以什么格式提交,及怎么获取request中的数据

    • js文件

1 $.ajax({

2     type: "POST",

3     url: "/accountAjax/",  // 此处一定要两侧都加/

4     dataType: "json",

5     data: JSON.stringify({"account_str": account_str}),  //这里是坑:以json的形式提交

6     success: function(data){

7         if(data.infos == "error"){

8             occupied_err.style.display = "block";

9         }

10     }

11 })

  • views文件

1 def accountAjax(request):

2     if request.method == "POST":

3         # 这里同样要以json的形式接受

4         # decode():将数据从二进制解码为json字符串

5         # json.loads():将数据还原为字典,再取其中的值就可以了

6         account = json.loads(request.body.decode())["account_str"]

7         try:

8             User.objects.get(userAccount=account)

9             return JsonResponse({"infos": "error"})

10         except User.DoesNotExist:

11             return JsonResponse({"infos": ""})

  • csrf问题
    如果Django开启了csrf中间件,ajax的请求就会出问题,我们可以再js中应用Django官网提供的ajaxsend,之间将代码放在顶部就可以了

jQuery(document).ajaxSend(function(event, xhr, settings) {

function getCookie(name) {

var cookieValue = null;

if (document.cookie && document.cookie != ‘‘) {

var cookies = document.cookie.split(‘;‘);

for (var i = 0; i < cookies.length; i++) {

var cookie = jQuery.trim(cookies[i]);

// Does this cookie string begin with the name we want?

if (cookie.substring(0, name.length + 1) == (name + ‘=‘)) {

cookieValue = decodeURIComponent(cookie.substring(name.length + 1));

break;

}

}

}

return cookieValue;

}

function sameOrigin(url) {

// url could be relative or scheme relative or absolute

var host = document.location.host; // host + port

var protocol = document.location.protocol;

var sr_origin = ‘//‘ + host;

var origin = protocol + sr_origin;

// Allow absolute or scheme relative URLs to same origin

return (url == origin || url.slice(0, origin.length + 1) == origin + ‘/‘) ||

(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + ‘/‘) ||

// or any other URL that isn‘t scheme relative or absolute i.e relative.

!(/^(\/\/|http:|https:).*/.test(url));

}

function safeMethod(method) {

return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));

}

if (!safeMethod(settings.type) && sameOrigin(settings.url)) {

xhr.setRequestHeader("X-CSRFToken", getCookie(‘csrftoken‘));

}

});

3.Django显示图片相关配置

  • 首先,目录结构应该是:项目根目录下的media/avatar来存放图片
  • 其次,模型类的字段设置:avatar = ImageField(upload_to=‘avatar/‘)
  • 还有,数据库中存放结果一定得是:avatar/xxxx.jpg
  • settings文件

# 这两个是静态文件路径,其实显示不显示图片这两个你都要设置

STATIC_URL = ‘/static/‘

STATICFILES_DIRS = [os.path.join(BASE_DIR, ‘static‘)]

# 而这两个是显示媒体文件必须要设置的,原理和静态文件是一样的

MEDIA_URL = ‘/media/‘

MEDIA_ROOT = os.path.join(BASE_DIR, ‘media‘)

  • urls文件(注意是项目文件下的)

# 在文件中增加下面的代码

from django.conf import settings

from django.views.static import serve  # 相当于处理媒体文件的一个函数

urlpatterns = [

......

url(r‘^media/(.*)‘, serve, {"document_root": settings.MEDIA_ROOT}),

]

  • template文件

<!-- 模板中一定要给出相对路径:/media/avatar/xxxx.jpg -->

<!-- 也可以是{{ user.avatar.url }} 也就是:表名.字段名.url -->

<span><img src="/media/{{ userImg }}"></span>

以上就是全部注意点,最好完全一样

4.给模型类对象自定义属性


# user是从数据库中取出的一条数据对象

# new_add_attr是User模型类中没有定义的属性,

# 可以通过这种方式给user设定一个新属性,用于后续的局部操作,但数据库中并没变

user = User.objects.get(username=username)

user.new_add_attr = 10

5.借用Django用户系统注意点

1.存用户:create_user()


# 创建Django后台用户必须用create_user(),此方法可以将密码hash加密,存入后台;否则密码将明文存入数据库,注册后登陆不上。

# 也可以用create(),但存密码时调用django.contrib.auth.hashers.make_password()

user = User.objects.create_user(username=username, password=password, email=email)

6.json.dumps()序列化不了DateTime格式的字符串


# 可以通过下面的方式序列化数据,dumps()不了的数据全部可以用序列化的方式来处理

from django.core import serializers

json_data = serializers.serialize(‘json‘, goods)

return JsonResponse(json_data, safe=False)

7.信号量

django的信号量: django在执行某些操作之前会向全局发送一个信号, 我们可以截获这些信号,并加入一些逻辑, 比如post_save(), 就可以在保存post的数据之前对数据进行一些操作. 比如将新注册的账号的密码加密后再保存


# signals.py

from django.db.models.signals import post_save

from django.dispatch import receiver

from django.contrib.auth import get_user_model

UserProfile = get_user_model()

@receiver(post_save, sender=UserProfile)

def create_user(sender, instance=None, created=False, **kwargs):

if created:

instance.set_password(instance.password)

instance.save()

# __init__.py

default_app_config = ‘users.apps.UsersConfig‘

# apps.py

class UsersConfig(AppConfig):

name = ‘users‘

def ready(self):

import users.signals

时间: 2024-10-09 07:10:41

实用技巧(掉进去又爬出来的坑儿)的相关文章

Buildroot构建指南--快速上手与实用技巧【转】

本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52335634 Buildroot官方全英文使用手册的链接是https://buildroot.org/downloads/manual/manual.html,需要知道每一个细节的朋友,可以仔细查阅,这篇文章只是我自己从中提炼出来的一下快速上手的技巧. 如何在现有项目加入自己的APP Buildroot从零开始构建的过程还是很复杂的,以后的文章会一步步介绍.我们先来看看如何在现有项目中

iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS

友情提示:本文使用的AFNetworking是最新git pull的2.3.1版本,如果想确认你机器上的AFNetworking版本,请打git tag命令查看. 绝大部分iOS程序的后台服务都是基于RESTful或者WebService的,不论在任何时候,你都应该将服务置于HTTPS上,因为它可以避免中间人攻击的问题,还自带了基于非对称密钥的加密通道!现实是这些年涌现了大量速成的移动端开发人员,这些人往往基础很差,完全不了解加解密为何物,使用HTTPS后,可以省去教育他们各种加解密技术,生活轻

Matlab实用技巧

1  Matlab Cell 编程模式 在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了.cell模式相当于将其中的代码拷贝到命令窗口中运行.两个%后接一个空格(%% )开始一个cell.将输入光标放到一个cell中时,背景将变为浅黄色,Ctrl+Enter执行cell中的代码.     执行cell中代码时不需要保存m文件,该m文件可以不在路径列表中.     cell模式中,断点不起作用,当然,调用的子程序中的断点还是正常的. 2 Matl

很全面的WinRAR实用技巧系列 - imsoft.cnblogs

WinRAR也可以管理我的桌面时间长了,桌面上堆的东西实在太多,平时该如何管理呢?安装了WinRAR的朋友可以请它来帮忙,用它管理清除无用的桌面文件或图标. 以XP系统为例,系统所在目录是"c:\windows",假设用户名为"user",桌面上的图标和文件都在"c:\documents and settings\user\桌面"文件夹中.确定桌面上需要保存的图标和文件,在记事本中撰写文件列表,如: c:\documents and settin

linux实用技巧:使用快照制作虚拟机

在日常的学习当中,如果遇到了集群和负载均衡类的实验,需要用到大量的虚拟机,如果一个一个的去创建,显然是非常费力和低效的.所以今天交给大家如何用快照来制作虚拟机.想要多少给你多少^_^.只要内存够用! 制作虚拟机的快照分为以下几个步骤: 1.首先我们要创建存储的逻辑卷来生成模板和快照文件: 2.制作被快照的模板: 3.创建快照. 1.创建逻辑卷: (1)fdisk /dev/sda   (制作LVM逻辑卷,然后对磁盘进行重新的扫描:) (2)partx -d /dev/sda partx -a /

Mac实用技巧之:访达/Finder

由于不太可能每次都来这里更新,更多MacOS实用技巧系列文章,请看我的博客:Mac使用技巧系列教程 Finder就相当于windows XP系统的『我的电脑』或win7/win10系统里的『计算机』(打开后叫资源管理器),find是查找的意思,那Finder就是查找者,寻找者,或者说是查找器,是用来管理你系统各种软件.程序,文档,图片视频等资源的管理器,所以说windows叫资源管理器是很合理的,Finder以前不翻译,直接就叫Finder(中文版也没有翻译),后来可能想讨好更多的中国人,翻译成

干货!深度学习七个实用技巧

深度学习已经成为解决许多具有挑战性的现实世界问题的方法.对目标检测,语音识别和语言翻译来说,这是迄今为止表现最好的方法.许多人将深度神经网络(DNNs)视为神奇的黑盒子,我们放进去一堆数据,出来的就是我们的解决方案!事实上,事情没那么简单.在设计和应用DNN到一个特定的问题上可能会遇到很多挑战.为了达到现实世界应用所需的性能标准,对数据准备,网络设计,训练和推断等各个阶段的正确设计和执行至关重要.在这里,我将与大家分享7个实用技巧,让您的深度神经网络发挥最大作用. 1 - 数据,数据,数据 这不

Mac预览怎么用 Mac预览功能实用技巧大全

Mac预览怎么用?有很多的用户以为Mac自带的预览功能只具有简单的图片浏览功能,其实不然,其实"预览"是一款强大的看图.修图.改图软件,也同时是一款多功能的 PDF 阅读与编辑工具,接下来Pc6苹果小编给大家详细介绍一下Mac预览功能实用技巧. 目前的 Mac 预览程式可以支持 TIFF. PNG. JPEG. GIF. BMP. PDF 等主要文件格式的浏览与编辑,而单纯预览上也可以支持像是 Photoshop 等专业图像处理软件. Office 等专业文书处理软件所产生的特殊文件格

iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https://github.com/HanGangAndHanMeimei/Code 一.使用for循环 要遍历字典.数组或者是集合,for循环是最简单也用的比较多的方法,示例如下: 1 //普通的for循环遍历 2 -(void)iteratorWithFor 3 { 4 //////////处理数组/////