Django项目

一、安装项目的过程:
命令行输入:django -admin startproject myblog 创建一个项目
启动服务器:python manage.py runserver 8080(更改端口)
加载模板:在setting中配置
创建app : python manage.py startapp books
二、数据库配置
setting.py中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '',
        'USER': '',
        'HOST': '127.0.0.1',
    }
}

测试你的数据库配置:

 from django.db import connection
 cursor = connection.cursor()

在model.py中定义数据库中的字段;

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

要进行模型安装:
将 books app 添加到配置文件的已安装应用列表中即可完成此步骤
验证模型的有效性: python manage.py validate
生成数据库表: python manage.py makemigrations app名称/默认所有
再执行 python manage.py migrate 数据迁移
运行下面的命令来生成 CREATE TABLE 语句: python manage.py sqlall books
sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来:
提交SQL语句至数据库的方法: syncdb 命令 python manage.py syncdb
四、一个注意点:
对于每个app下面的模板,需要在templates下面新建以app名字相同的文件夹以区分
name参数就是用来解决此问题的。name用来唯一区一个视图对应多个urlconf的场景。通过name来反向获取URL。
url()函数中有四个参数
kwargs
kwargs就是一个字典类型的参数,它的使用方式如:
五、将你的Models加入到Admin管理中
注册一下:

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

六、模板加载机制:
get_template()方法会自动为你连接已经设置的 TEMPLATE_DIRS目录和你传入该法的模板名称参数。比如,你的 TEMPLATE_DIRS目录设置为 ‘/home/django/mysite/templates’,上面的 get_template()调用就会为你找到

os.path.dirname(os.path.dirname(file)) #指的是 当前文件所在目录的所在目录,即上一层文件夹。
七、高级url配置问题
我们可以把公共的前缀提取出来,作为第一个参数传给\ “函数:

urlpatterns = patterns(**'mysite.views'** ,
    (r'^hello/$', **'hello'** ),
    (r'^time/$', **'current_datetime'** ),
    (r'^time/plus/(d{1,2})/$', **'hours_ahead'** ),
)

在关键字参数调用中,你要指定参数的名字和传入的值。 在位置参数调用中,你只需传入参数,不需要明确指明哪个参数与哪个值对应,它们的对应关系隐含在参数的顺序中。
无名组的 URLconf 的例子:

urlpatterns = patterns('',
    (r'^articles/(\d{4})/$', views.year_archive),
    (r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
)

命名组进行了重写:

urlpatterns = patterns('',
    (r'^articles/(?P<year>\d{4})/$', views.year_archive),
    (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),
)

语法:?P<name>pattern
八、传递额外的参数到视图函数中
比如说,你有两个视图,它们的内容是一致的,除了它们所用的模板不太一样:

urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
    (r'^foo/$', views.foo_view),
    (r'^bar/$', views.bar_view),
)

views.py

from django.shortcuts import render_to_response
from mysite.models import MyModel

def foo_view(request):
    m_list = MyModel.objects.filter(is_new=True)
    return render_to_response('template1.html', {'m_list': m_list})

def bar_view(request):
    m_list = MyModel.objects.filter(is_new=True)
    return render_to_response('template2.html', {'m_list': m_list})

解决办法:
URLconf里面的每一个模式都可以包含第三个数据: 一个关键字参数的字典:

urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
    (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
    (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
)

views.py

from django.shortcuts import render_to_response
from mysite.models import MyModel

def foobar_view(request, template_name):
    m_list = MyModel.objects.filter(is_new=True)
    return render_to_response(template_name, {'m_list': m_list})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值