python manage.py flush

python manage.py changepassword username

python manage.py createsuperuser

python manage.py dumpdata appname > appname.json

python manage.py loaddata appname.json
python manage.py shell
#coding:utf-8
  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. def add(request):
  4. a = request.GET['a']
  5. b = request.GET['b']
  6. c = int(a)+int(b)
  7. return HttpResponse(str(c))

http://127.0.0.1:8000/add/?a=4&b=5

  1. 不带参数的:
  2. {% url 'name' %}
  3. 带参数的:参数可以是变量名
  4. {% url 'name' 参数 %}

Templates

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>{% block title %}默认标题{% endblock %} - 自强学堂</title>
  5. </head>
  6. <body>
  7. {% include 'nav.html' %}
  8. {% block content %}
  9. <div>这里是默认内容,所有继承自这个模板的,如果不覆盖就显示这里的默认内容。</div>
  10. {% endblock %}
  11. {% include 'bottom.html' %}
  12. {% include 'tongji.html' %}
  13. </body>
  14. </html>

继承

  1. {% extends 'base.html' %}
  2. {% block title %}欢迎光临首页{% endblock %}
  3. {% block content %}
  4. {% include 'ad.html' %}
  5. 这里是首页,欢迎光临
  6. {% endblock %}

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。

这就需要把每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放在 app/templates/app/ 目录下面,

例如:项目 zqxt 有两个 app,分别为 tutorial 和 tryit

 

  1. zqxt
  2. ├── tutorial
  3. ├── __init__.py
  4. ├── admin.py
  5. ├── models.py
  6. ├── templates
  7. └── tutorial
  8. ├── index.html
  9. └── search.html
  10. ├── tests.py
  11. └── views.py
  12. ├── tryit
  13. ├── __init__.py
  14. ├── admin.py
  15. ├── models.py
  16. ├── templates
  17. └── tryit
  18. ├── index.html
  19. └── poll.html
  20. ├── tests.py
  21. └── views.py
  22. ├── manage.py
  23. └── zqxt
  24. ├── __init__.py
  25. ├── settings.py
  26. ├── urls.py
  27. └── wsgi.py

这样,使用的时候,模板就是 "tutorial/index.html" 和 "tryit/index.html" 这样有app作为名称的一部分,就不会混淆。

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [],
  5. 'APP_DIRS': True,
  6. 'OPTIONS': {
  7. 'context_processors': [
  8. ...
  9. 'django.template.context_processors.request',
  10. ...
  11. ],
  12. },
  13. },
  14. ]
  1. {{ request.user }}
  2. {% if request.user.is_authenticated %}
  3. {{ request.user.username }},您好!
  4. {% else %}
  5. 请登陆,这里放登陆链接
  6. {% endif %}
  7. {{ request.path }}
  8. {{ request.GET.urlencode }}

Model

  1. 获取对象有以下方法:
  2.  
  3. Person.objects.all()
  4.  
  5. Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
  6.  
  7. Person.objects.get(name=name)
  8.  
  9. get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
  10.  
  11. Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
  12.  
  13. Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
  14.  
  15. Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人
  16.  
  17. Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写
  18.  
  19. Person.objects.filter(name__regex="^abc") # 正则表达式查询
  20.  
  21. Person.objects.filter(name__iregex="^abc")# 正则表达式不区分大小写
  22.  
  23. filter是找出满足条件的,当然也有排除符合某条件的
  24.  
  25. Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
  26.  
  27. Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的

Admin

  1. 1.定制加载的列表, 根据不同的人显示不同的内容列表,比如输入员只能看见自己输入的,审核员能看到所有的草稿,这时候就需要重写get_queryset方法
  2.  
  3. class MyModelAdmin(admin.ModelAdmin):
  4. def get_queryset(self, request):
  5. qs = super(MyModelAdmin, self).get_queryset(request)
  6. if request.user.is_superuser:
  7. return qs
  8. else:
  9. return qs.filter(author=request.user)

settings

  1. 运行 django-admin.py startproject [project-name] 命令会生成一系列文件,在Django 1.6版本以后的 settings.py 文件中有以下语句:
  2.  
  3. # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
  4. import os
  5. BASE_DIR = os.path.dirname(os.path.dirname(__file__))
  6. 这里用到了python中一个神奇的变量 __file__ 这个变量可以获取到当前文件(包含这个代码的文件)的路径。os.path.dirname(__file__) 得到文件所在目录,再来一个os.path.dirname()就是目录的上一级,BASE_DIR 即为 项目 所在目录。我们在后面的与目录有关的变量都用它,这样使得移植性更强。
  7.  
  8. # SECURITY WARNING: don't run with debug turned on in production!
  9. DEBUG = True
  10. TEMPLATE_DEBUG = True
  11. DEBUGTrue 时,如果出现 bug 便于我们看见问题所在,但是部署时最好不要让用户看见bug的详情,可能一些不怀好心的人攻击网站,造成不必要的麻烦。
  12.  
  13. ALLOWED_HOSTS = ['*.besttome.com','www.ziqiangxuetang.com']
  14. ALLOWED_HOSTS 允许你设置哪些域名可以访问,即使在Apache中绑定了,这里不允许的话,也是不能访问的。
  15.  
  16. DEBUG=False 时,这个为必填项,如果不想输入,可以用 ALLOW_HOSTS = ['*'] 来允许所有的。
  17.  
  18. STATIC_URL = '/static/'
  19. STATIC_ROOT = os.path.join(BASE_DIR,'static')
  20. static 是静态文件所有目录,比如 jquery.js, bootstrap.min.css 等文件。
  21.  
  22. 一般来说我们只要把静态文件放在 APP 中的 static 目录下,部署时用 python manage.py collectstatic 就可以把静态文件收集到 STATIC_ROOT 目录,但是有时我们有一些共用的静态文件,这时候可以设置 STATICFILES_DIRS 另外弄一个文件夹,如下:
  23.  
  24. STATICFILES_DIRS = (
  25. os.path.join(BASE_DIR, "common_static"),
  26. '/var/www/static/',
  27. )
  28. 这样我们就可以把静态文件放在 common_static /var/www/static/中了,Django也能找到它们。
  29. MEDIA_URL = '/media/'
  30. MEDIA_ROOT = os.path.join(BASE_DIR,'media')
  31. media文件夹用来存放用户上传的文件,与权限有关,详情见 Django 静态文件 Django 部署
  32.  
  33. 有时候有一些模板不是属于app的,比如 baidutongji.html, share.html等,
  34.  
  35. Django 1.5 - Django 1.7
  36.  
  37. TEMPLATE_DIRS = (
  38. os.path.join(BASE_DIR, 'templates').replace('\\', '/'),
  39. os.path.join(BASE_DIR, 'templates2').replace('\\', '/'),
  40. # ...
  41. )
  42. Django 1.8 及以上版本
  43.  
  44. TEMPLATES = [
  45. {
  46. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  47. 'DIRS': [
  48. os.path.join(BASE_DIR,'templates').replace('\\', '/'),
  49. os.path.join(BASE_DIR,'templates2').replace('\\', '/'),
  50. ],
  51. 'APP_DIRS': True,
  52. ]
  53. 这样 就可以把模板文件放在 templates templates2 文件夹中了。

Stacic

  1. urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  2. urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  3.  
  4. MEDIA_ROOT = os.path.join(BASE_DIR,'media/')
  5. MEDIA_URL = '/media/'
  6.  
  7. python manage.py collectstatic
  8. 这一句话就会把以前放在appstatic中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中
  9.  
  10. ngnix
  11. location /media {
  12. alias /path/to/project/media;
  13. }
  14.  
  15. location /static {
  16. alias /path/to/project/collected_static;
  17. }
  18.  
  19. STATIC_ROOT = os.path.join(BASE_DIR,'static/')
  20. STATIC_URL = '/static/'

Session

Django完全支持也匿名会话,简单说就是使用跨网页之间可以进行通讯,比如显示用户名,用户是否已经发表评论。session框架让你存储和获取访问者的数据信息,这些信息保存在服务器上(默认是数据库中),以 cookies 的方式发送和获取一个包含 session ID的值,并不是用cookies传递数据本身。

  1. 编辑settings.py中的一些配置
  2.  
  3. MIDDLEWARE_CLASSES 确保其中包含以下内容
  4.  
  5. 'django.contrib.sessions.middleware.SessionMiddleware',
  6. INSTALLED_APPS 是包含
  7.  
  8. 'django.contrib.sessions',

比如写一个不让用户评论两次的应用:

  1. from django.http import HttpResponse
  2.  
  3. def post_comment(request, new_comment):
  4. if request.session.get('has_commented', False):
  5. return HttpResponse("You've already commented.")
  6. c = comments.Comment(comment=new_comment)
  7. c.save()
  8. request.session['has_commented'] = True
  9. return HttpResponse('Thanks for your comment!')

 一个简化的登陆认证:

  1. def login(request):
  2. m = Member.objects.get(username=request.POST['username'])
  3. if m.password == request.POST['password']:
  4. request.session['member_id'] = m.id
  5. return HttpResponse("You're logged in.")
  6. else:
  7. return HttpResponse("Your username and password didn't match.")
  8.  
  9. def logout(request):
  10. try:
  11. del request.session['member_id']
  12. except KeyError:
  13. pass
  14. return HttpResponse("You're logged out.")

  JAVASCRIPT

  1. <script type="text/javascript">
  2. var List = {{ List }};
  3. alert(List);
  4. </script>

  Django 通用视图,Djano Ajax

   

Django_collections01的更多相关文章

随机推荐

  1. morris的用法

    參數選項說明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...

  2. 1121高性能MySQL之运行机制

    本文来自于拜读<高性能MySQL(第三版)>时的读书笔记作者:安明哲转载时请注明部分内容来自<高性能MySQL(第三版)> MySQL的逻辑构架 MySQL服务器逻辑架构 最上 ...

  3. Android下常见动画

    摘要:Android中常见的的动画有三种:属性动画.补间动画.帧动画. 注.因为前两种内容较多,后补 一.属性动画 二.补间动画 三.帧动画:本质是将一些连贯的图片加载形成连贯的动画效果 1.在Dra ...

  4. js 对象数组根据对象中的属性排序

    function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = obje ...

  5. Android Material Design 控件常用的属性

    android:fitsSystemWindows="true" 是一个boolean值的内部属性,让view可以根据系统窗口(如status bar)来调整自己的布局,如果值为t ...

  6. Gitlab的搭建

    从网上看了一大堆的资料,最终选定按照github上的文档来搭建,虽然本人英文不好,就这样看着 这个博客弯曲完全是拷贝过来的,只为了做个笔记 原文地址:https://github.com/gitlab ...

  7. 文本溢出省略解决笔记css

    text-overflow:ellipsis; overflow:hidden; white-space:nowrap; *white-space:nowrap;

  8. bzoj 3743

    这道题用到了4个dfs,分别是找出所有家的最小生成树,找出一点距离树的最小距离,找出每个点儿子距离的最大值(不包括父亲,也就是指不包括根节点的子树),用父亲的值来更新自己 因为我们可以知道:如果我们在 ...

  9. 100803C

    画个图,很容易发现少兜圈子,就是说这些限制c[i],d[i]可以看做[c[i],d[i]],不让那些区间相交,然后就可以了 #include<iostream> #include<c ...

  10. js-处理div设置的编辑框处理焦点定位追加内容

    具体实现方法如下: 首先要让DIV启用编辑模式 <div contenteditable=true id="divTest"></div> 通过设定cont ...