Django初识

来源:互联网 发布:大数据100g百度云 编辑:程序博客网 时间:2024/06/08 00:23
简介

Django是一款开源的web框架,使用python语言,采用mvc架构,主要用来构建CMS(内容管理系统)。


创建web工程

Django工程包含两个部分
1. 公开网站让所有人都可以访问
2. 管理员网站让你可以进行修改

下面我们就开始创建web工程吧

确保Django的安装
python -m django --version

在命令行中输入上述代码,如果你的电脑中已经安装django,那么会打印你的django的版本号,如果没有安装,会打印No module named django。这个时候你就需要去安装django了,这里对安装django的安装就不再赘述了。


注意
1. 如果你的python版本是3以下,命令行输入的命令如上都是:python开头;如果你的python版本是3以上,输入命令的时候就是python3开头,如上面的命令就应该是python3 -m django –version。以下的命令均如此
2. 另外要注意django版本和python版本的支持


创建项目工程

进入工程目录下输入以下命令,在这里我使用的项目名称为blog,以下出现blog的地方都可以改为你的项目名。

django-admin startproject blog

执行该代码之后你会在该目录下有一个blog目录,具体层级数如下:

blog/                        //项目根目录,用来存放django项目,可以随便修改名字,对整个项目无影响    manage.py                //和django项目进行交互的命令行功能    blog/                    //真实的django项目目录,相当于一个模块        __init__.py          //空文件,代表一个python包        settings.py          //django项目的相关配置        urls.py              //django项目的URL声明        wsgi.py              //wsgi兼容web服务器的入口,一般不进行修改

上面的这么些文件,其实在搭建简单的blog项目,只需要用到settings.py和urls.py

这个时候我们就可以启动服务器了

python manage.py runserver

这时我们可以在命令行中看见
Starting development server at http://127.0.0.1:8000/
然后打开网页,就可以发现it works出现在眼前。

runserver后面可以接ip以及端口,如下都是可以的

python manage.py runserver 8008//http://127.0.0.1:8008python manage.py runserver 120.0.0.1:8008//http://120.0.0.1:8008 //当然这个ip是不能分配的,一般默认就行

说了这么多,这只是创建了一个项目,接下来我们要创建我们自己的app

创建app
python manage.py startapp myblogs

运行上面的命令,你会发现当前目录会出现myblogs文件夹,不错这就是我们创建的myblogs app下面我们来看一下其目录结构

myblogs/    __init__.py    admin.py             //admin管理员界面的相关配置    apps.py              //    migrations/          //数据库存放位置,通过相关命令进行数据迁移        __init__.py    models.py            //数据模型    tests.py             //测试用例    views.py             //界面视图
建立视图

myblogs/views.py

from django.http import HttpResponsedef index(request):    return 'Hello World!' 

我们只是简单的输出hello world,注意views中的界面应该传入一个参数,默认为request。
接下来我们进行url的配置,首先我们在myblogs下新建urls.py文件,这样能够避免在项目下的urls.py文件的臃肿,减少其配置。
myblogs/urls.py

from django.conf.urls import urlfrom . import viewsurlpatterns = {    url(r'^$',view.index,name='index)}

并且修改项目下的urls.py文件
blog/urls.py

from django.conf.urls import include,urlfrom django.contrib import adminurlpatterns = {    url(r'^blog',include('blog.urls'))    url(r'^admin/',admin.site.urls)}

注意
url()可以传递几个参数
- argument:regex 端口号后面的url,^代表开头匹配,$表示结尾匹配
- argument: view 当Django匹配到了规定的表达式,调用对应的view方法
- argument: name 为url指向明确的含义,尤其是在templates文件夹下

include() 允许指向其他的url配置信息,这样就可以很方便的为多个应用创建各自的url配置


数据库设置

blog/settings.py包含DATABASES这一项,可以通过该项设置数据库,首先看一下默认的设置:

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

默认配置使用的ENGINE是sqlite3,我们还可以设置为其他的如:
‘django.db.backends.postgresql’,
‘django.db.backends.mysql’,
‘django.db.backends.oracle
其NAME就是数据库的绝对路径,由于django内置了sqlite3,如果使用该数据库,就可以不用进行设置。

创建数据模型

myblogs/models.py

from django.db import modelsclass Article(models.Model):    title = models.CharFiled(max_length=32, defalut='title)    content = models.TextFiled(null = True)    pub_time = models.DateTimeFiled(auto_now = True)

该模型中创建了三个参数,title,content,pub_time,分别设定不同的默认值。
最后别忘了在blog/settings.py中INSTALLED_APPS添加上我们创建的App,结果如下

INSTALLED_APPS = [    'django.contrib.admin',             //管理员站点    'django.contrib.auth',              //验证系统    'django.contrib.contenttypes',      //content type Framework    'django.contrib.sessions',          //会话Framework    'django.contrib.messages',          //消息Framework    'django.contrib.staticfiles',       //静态文件管理Framework    'myblogs'                           //自己创建的App]
数据迁移
python manage.py makemigrations myblogs

执行该行命令,主要是告诉django,你已经改变了models,需要重新加载migration,其会在myblogs/migrations文件夹下创建0001_initial.py文件,我们可以通过命令行进行查看

python manage.py sqlmigrate myblogs 0001

此时命令行会打印数据库创建的代码
最后需要执行migrate 来讲models的改变同步到数据库

python manage.py migrate
创建admin账户
python manage.py createsuperuser

然后输入用户名,密码以及邮箱就可以了,注意喽,这里的密码不能设置的太简单。一般设置你自己或者项目的名称就可以了。

然后启动服务器

python manage.py runserver

就可以在浏览器中通过http://127.0.0.1:8000/admin/ 访问我们的admin账户了,但是你会发现admin账户中没有刚才创建在models.py创建的Article对象,怎么办呢?我们可以通过在admin中对该对象进行注册就可以了
myblogs/admin.py

from django.contrib import adminfrom .models import Articleadmin.site.register(Article)

这个时候刷新admin,你就会发现Article一栏了,这个时候你就可以进行Article,但是你会发现编辑完了之后,显示的并不是我们编写的title,这是怎么回事呢?我们需要修改一下admin.py

class ArticleAdmin(admin.ModelAdmin):    list_display = ('title', 'content', 'pub_time')admin.site.register(Article,ArticleAdmin)

定义一个ArticleAdmin类,里面包含一个元组list_display,包含我们article的所有属性,然后注册上,就可以了。当然这个元组中你可以只包含你所想要添加的属性。当然也可以定义list_filter,然后管理员界面我们就可以根据相应的属性进行筛选。

定义界面

既然我们做的是博客网站,那么少不了页面了,那么我们应该有哪些界面呢?至少我们应该有主页面,详情页以及编辑界面这三个界面。
首先定义url,先看一下我定义的结果吧
myblogs/urls.py

#/blog/url(r'^$',views.index),#/blog/5/url(r'^(?P<article_id>[0-9]+)$', views.article_page, name='article'),#/blog/edit/5/url(r'^edit/(?P<article_id>[0-9]+)$', views.edit_page, name='edit_page'),

在每个url上面都给了示例,是不是有看不懂,?P[0-9]+这一串是什么东西,首先?P是决定匹配模式的名字,在第二个URL中就是后面数字所代表的名字,[0-9]+匹配至少一个以上的数字,

url定义好了,那么定义views
myblogs/views.py

def index(request):    articles = models.Article.objects.all()    return render(request, 'blog/index.html', {'articles': articles})def article_page(request, article_id):    article = models.Article.objects.get(pk=article_id)    return render(request, 'blog/article_page.html', {'article': article})def edit_page(request, article_id):    article = models.Article.objects.get(pk=article_id)    return render(request, 'blog/edit_page.html', {'article': article})

是不是很简单,all()可以获得所有的article,如果你不想获得所有的article,并且按照某个顺序的话,可以如下设置:

#按照pub_time递减(-),取前10个数据articles = models.Article.objects.order_by('-pub_time')[:10]

get()传递pk,也就是primary key就可以得到该对象。

现在来编写html模板,我们需要在myblogs下建立templates/myblogs/文件夹
然后编写index.html网页:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>我的博客</h1>    {% for a in articles %}        <a href="{% url 'blog:article' a.id %}">{{ a.title }}</a>        <br/>    {% endfor %}</body></html>

这里有两个语法
{% %} 中间包含的是语法,
- {% for a in articles %}是for循环,而每一个for循环都必须有end{% endfor %},if也是一样。
- {% url ‘blog:article’ a.id %}这个语法包含三个参数,url表明创建一个url,’blog:article’表明指向的是name,冒号前面是在项目下我们blog/urls.py的name=’blog’指向的url,冒号后是前一个url指向的app下name=’article’指向的url,这样就确定了我们指向的url。第三个参数a.id是我们正则匹配的值

{{ }}中间包含的是数据引用


其他的页面也是如此。

你可能会问,那么我们的css,js文件放哪呢?
我们在myblogs下创建static/myblogs/文件夹,如果有图片也可在该文件夹下创建image/文件夹来存放你图片。

现在基本上就已经讲完了,想学到更多知识请看官方网站https://docs.djangoproject.com/

本文的具体代码https://github.com/shamaker/django-blog

原创粉丝点击