Django 入门

本文详细介绍了Django项目的搭建与配置。包括新建Django项目和app、运行程序、创建models、设置数据库、同步数据库、使用Django shell进行操作,还介绍了Admin后台管理,如创建超级管理员、使用第三方插件美化界面,以及配置views、urls和添加Templates等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文档:https://andrew-liu.gitbooks.io/django-blog/models.html

1、新建一个 django project

django-admin.py startproject my_blog

注: windows的话,如果报错,可改成:django-admin  startproject project_name、

注意执行这个命令的目录路径不要包含中文,否则可能会提示报错:

my_blog的目录结构如下:

my_blog
├── manage.py
└── my_blog
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
 

2、新建 app

python manage.py startapp article

app:是一个功能模块, 与其他的web框架可能有很大的区别, 将不能功能放在不同的app中, 方便代码的复用。

如my_blob/settings.py文件中的:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]则是一个个功能模块。我们将我们新创建的app,加入到其中,django就可以引用这个模块。

现在在my_blog/my_blog/setting.py下添加新建app

INSTALLED_APPS = (
    ...
    'article',  #这里填写的是app的名称
)

3、运行程序

$ python manage.py runserver   #启动Django中的开发服务器
#运行成功显示如下信息
System check identified no issues (0 silenced).
December 21, 2014 - 08:56:00
Django version 1.7.1, using settings 'my_blog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

现在可以启动浏览器, 输入http://127.0.0.1:8000/, 当出现如下页面,表示启动成功。

It worked!

Congratulations on your first Django-powered page.

Next, start your first app by running python manage.py startapp [app_label].

You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!

4、创建models

4.1 设置数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

默认是sqlite3,也可以配置mysql、PostgreSQL等。

4.2 创建models

在my_blog/article/models.py下编写如下程序:

from django.db import models

# Create your models here.
class Article(models.Model) :
    title = models.CharField(max_length = 100)  #博客题目
    category = models.CharField(max_length = 50, blank = True)  #博客标签
    date_time = models.DateTimeField(auto_now_add = True)  #博客日期
    content = models.TextField(blank = True, null = True)  #博客文章正文

    #python2使用__unicode__, python3使用__str__
    def __str__(self) :
        return self.title

    class Meta:  #按时间下降排序
        ordering = ['-date_time']

其中__str__(self) 函数Article对象要怎么表示自己, 一般系统默认使用<Article: Article object> 来表示对象, 通过这个函数可以告诉系统使用title字段来表示这个对象

  • CharField 用于存储字符串, max_length设置最大长度
  • TextField 用于存储大量文本
  • DateTimeField 用于存储时间, auto_now_add设置True表示自动设置对象增加时间。

4.3 同步数据库

 python manage.py migrate #命令行运行该命令
 python manage.py makemigrations
 python manage.py migrate #重新命令行运行该命令

4.4 Django shell 

 python manage.py shell

最后进入django shell,来进行数据表的增删改查操作。

>>> from article.models import Article
>>> #create数据库增加操作
>>> Article.objects.create(title = 'Hello World', category = 'Python', content = '我们来做一个简单的数据库增加操作')
<Article: Article object>
>>> Article.objects.create(title = 'Django Blog学习', category = 'Python', content = 'Django简单博客教程')
<Article: Article object>

>>> #all和get的数据库查看操作
>>> Article.objects.all()  #查看全部对象, 返回一个列表, 无对象返回空list
[<Article: Article object>, <Article: Article object>]
>>> Article.objects.get(id = 1)  #返回符合条件的对象
<Article: Article object>

5、Admin后台管理

Django有一个优秀的特性, 内置了Django admin后台管理界面, 方便管理者进行添加和删除网站的内容。

新建的项目系统已经默认为我们设置好了后台管理功能。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'article',
]

同时url也添加了admin的路径:

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
]

5.1 创建超级管理员

$ python manage.py createsuperuser
Username (leave blank to use 'andrew_liu'): root
Email address:
Password:
Password (again):
Superuser created successfully.

重新启动服务器,python manage.py runserver ,访问127.0.0.1:8000/admin,显示如下页面,输入刚创建的用户名,密码则可进入后台管理页面。

è¿å¥

但是我们发现并没有数据库信息的增加和删除, 现在我们在my_blog/article/admin.py中增加代码:

from django.contrib import admin
from article.models import Article

# Register your models here.
admin.site.register(Article)

保存后, 再次刷新页面, 127.0.0.1:8000/admin

æå

5.2 使用第三方插件,美化后台管理系统。

Django现在已经相对成熟, 已经有许多不错的可以使用的第三方插件可以使用, 这些插件各种各样, 现在我们使用一个第三方插件使后台管理界面更加美观, 目前大部分第三方插件可以在Django Packages 中查看,

尝试使用django-admin-bootstrap美化后台管理界面

如:

pip install bootstrap-admin

配置插件:(适用于django-1.7版本,1.8以上支持不好,需要再研究下)

然后在my_blog/my_blog/setting.py中修改INSTALLED_APPS


INSTALLED_APPS = (
    'bootstrap_admin',  #一定要放在`django.contrib.admin`前面
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'article',
)

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    'django.core.context_processors.request',
)
BOOTSTRAP_ADMIN_SIDEBAR_MENU = True

6、配置URL和Views

request进来->从服务器获取数据->处理数据->把网页呈现出来

  • url设置相当于客户端向服务器发出request请求的入口, 并用来指明要调用的程序逻辑
  • views用来处理程序逻辑, 然后呈现到template(一般为GET方法, POST方法略有不同)
  • template一般为html+CSS的形式, 主要是呈现给用户的表现形式

6.1 配置views

配置一个名为home的view,和一个detail的view,其中detail里访问Model Article。

from django.shortcuts import render
from django.http import HttpResponse
from article.models import Article

# Create your views here.
def home(request):
    return HttpResponse("Hello World, Django")

def detail(request, my_args):
    post = Article.objects.all()[int(my_args)]
    str = ("title = %s, category = %s, date_time = %s, content = %s" 
        % (post.title, post.category, post.date_time, post.content))
    return HttpResponse(str)

6.2 配置urls

为views配置相应的路由。

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'article.views.home'),
    url(r'^(?P<my_args>\d+)/$', 'article.views.detail', name='detail'),
]

现在可以访问http://127.0.0.1:8000/1/

7、添加Templates

 在 article目录下新建一个 templates 文件夹,里面新建一个 test.html。默认配置下,Django 的模板系统会自动找到app下面的templates文件夹中的模板文件。

article/templates/test.html

<!--在test.html文件夹下添加-->
<!DOCTYPE html>
<html>
    <head>
        <title>Just test template</title>
        <style>
            body {
               background-color: red;
            }
            em {
                color: LightSeaGreen;
            }
        </style>
    </head>
    <body>
        <h1>Hello World!</h1>
        <strong>{{ current_time }}</strong>
    </body>
</html>

在article/view.py中添加一个函数逻辑:

def test(request) :
    return render(request, 'test.html', {'current_time': datetime.now()})

然后在在my_blog/urls.py中设置对应的url

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'article.views.home'),
    url(r'^(?P<my_args>\d+)/$', 'article.views.detail', name='detail'),
    url(r'^test/$', 'article.views.test'),
]

重新启动服务器python manage.py runserver, 然后在浏览器中输入http://127.0.0.1:8000/test/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值