django常见错误

django初体验:

1.django-admin startproject zzh
2.django-admin startapp blog
3.vim setting.py
  app add --->blog
4.vim urls.py
  url(r'blog/index/$',blog.views.index)
5.vim blog/views.py
  from django.http import HttpResponse
  def index(req):
      return HttpResponse('<h1>hello</h1>')  
6.python manager.py runserver
  url:127.0.0.1:8000

数据库操作

数据添加
第一种方法:

emp=Employee()
emp.name='Tom'
emp.save()

第二种方法:

emp=Employee(name='Sam')
emp.save()

第三种方法:

Employee.objects.create(name='Musk')

查询数据

emps=Employee.objects.all


设置templates模板路径

mysite/mysite/settings.py ## mysite是项目名

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],           # templates
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

这个templates文件夹是放在project的目录下面的,是项目中或者说项目中所有的应用公用的一些模板


mysite/mysite/settings.py ## mysite/app1/ ## mysite是项目名字,app1是应用名字


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'app1/templates')],    ## templates
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

这个templates是在项目下面的应用app1文件夹里面,里面是app1这个应用用到的专用模板。


总结来说说:BASE_DIR是指mysite项目的绝对路径。

‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)] 是指到 BASE_DIR/templates文件夹中去取模板

‘DIRS’: [os.path.join(BASE_DIR, ‘app1/templates’)] 是指导 BASE_DIR/app1/templates文件夹中去取模板

一般来说,应该设置’DIRS’: [os.path.join(BASE_DIR, ‘templates’)],公用的templates需要指定。
app1专用的templates,放在app1/templates下,可以不需指定。因为在app1.views中若要指定一个专用模板,只要直接写‘app1_index.html’,Django服务器会在views文件所在的当前层(/app1)中找到templates,从而找到模板’app1_index.html’.

指定公用的templates路径,所有apps都可以调用,方便快捷。
app专用的templates不需要指定,这样当要复用这个app的时候,不需要考虑templates路径问题。


关于render和render_to_response的用法

from django.shortcuts import render
def index(req):
    emps = Employee.objects.all()
    return render(req, 'index.html', {'emps':emps}
from django.shortcuts import render_to_response
def index(req):
    emps = Employee.objects.all()
    return render_to_response('index.html', {'emps':emps}

HttpResponse和render

from django.shortcuts import render
from django.http import HttpResponse
from django.template import Template, Context

def home(request, id):
    #return render(request,'hello world')
    return HttpResponse('id is {}'.format(id))

def new(request):
    t=Template('My name is {{name}}')
    c=Context({'name':'TimorChow'})
    return HttpResponse(t.render(c))

def hello(request):
    context = {}
    context['title'] = 'My First DjangoPage!'
    #context['user']  = {'name':'sam', 'sex':'male', 'age':23}
    user = Person('tom222', 2333, 'female')
    context['user'] = user
    book_list = ['python', 'java', 'php']
    context['book_list'] = book_list

    return render(request, 'hello.html', context)




TypeError: view must be a callable or a list/tuple in the case of include()

在django 1.10 里面urls.py 新的写法:
urls.py 文件里添加blog的url:

from django.conf.urls import url
from django.conf.urls import include
from django.contrib import admin
from blog.views import index
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$',index),
]

如果使用django1.10以下的版本则写法:

from django.conf.urls import url
from django.conf.urls import include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$',"blog.views.index"),
]

Unknown command: ‘syncdb’

  1. 实验环境

ubuntu14.4 + django1.10
2. 问题描述

在配置完数据库mysite/settings.py后,通常需要运行

python manage.py syncdb

为数据库中每个应用建立一个数据库表。
然而如果你安装的Django Version >= 1.9,那么会出现如下问题:

gzxultra@gzxultraPC:~/django_try/mysite pythonmanage.pysyncdbUnknowncommand:syncdbTypemanage.pyhelpforusage.gzxultra@gzxultraPC: /djangotry/mysite python manage.py syncdbpython manage.py syncdbUnknown command: ‘syncdbpython’Type ‘manage.py help’ for usage.
3. 解决方法

在stackoverflow上找到原因和解决方法:
syncdb is deprecated because of the migration system.
Now you can log your changes using makemigrations. This transforms your model changes into python code to make them deployable to another databases.
After you created the migrations you have to apply them: migrate.
So instead of using syncdb you should use makemigrations and then migrate.

简言之:在Django 1.9及未来的版本种使用migrate代替syscdb.

**

python manage.py makemigrations
python manage.py migrate

**

./manage.py migrate


Forbidden (403) CSRF verification failed. Request aborted. Help Reason given for failure: CSRF token missing or incorrect.

在模板的form体里面,加入 {% csrf_token %} 例如:

<form action="" method="POST">
{% csrf_token %}
......
.....
</form>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值