学习链接:https://www.kancloud.cn/wizardforcel/django-chinese-docs-18/98844
学习课程:慕课网
1.创建一个虚拟环境:
sudo pip install virtualenvwrapper
1)创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs
2)在~/.bashrc中添加行:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
3)运行:
source ~/.bashrc
4)创建python虚拟环境
mkvirtualenv [虚拟环境名称]
workon [虚拟环境名称]
5)退出虚拟环境 离开 deactivate
6)删除
rmvirtualenv [虚拟环境名称]
*创建python3的虚拟环境----python3.6 -m venv {dir name}*
2.安装Django1.10.2:
pip install Django==1.10.2
检查是否安装成功:
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
3.创建第一个django项目:
选择任意一个你想存储代码的地方执行以下命令 django-admin.py startproject myblog
最好不要选择放在 Web 服务器的文档根目录下(例如:/var/www)。
将任何 Python 代码放在你的 Web 服务器文档根目录不会是一个好主意,因为这可能会增加人们通过 Web 方式查看到你的代码的风险。这不利于安全。
4.输入:tree查看文档结构
~/.virtualenvs/DjangoTest/code/myblog$ tree
.
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
manage.py 项目管理器,与项目进行交互的命令行工具集的入口
5.开启服务:
python manage.py runserver
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8080 (其他机器可以访问你)
6.数据库设置为mysql:
前提已经安装好Mysql数据库,然后执行:pip install MySQL-python
检查MySQLdb是否存在了,然后进入mysql创建数据库:CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
配置mysql ,进入mysite的setting.py:
#以后创建应用要写进这里面
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myblog',
'USER': 'root',
'PASSWORD': 'XXXXXX',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
执行:python manage.py migrate (自动在mysql 中创建表)
进入mysql
use mysite;
show tables; (检查是否创建表成功 )
*在运行 migrate 命令前可从 INSTALLED_APPS 内随意注释或删除相应的行。
7.创建app:
创建命令:django-admin.py startapp blog
修改setting里面:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
8.编写urls.py和blog里面的views
在blog里面创建一个urls.py,复制myblog里面的urls.py的内容进去并修改:
# encoding:utf-8
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index),#约素一个url #子目录
]
在myblog里面的urls.py如下:
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('blog.urls')), #父目录
]
9.Django 中的models对应数据库中的一张表,以类的形式表现出来,django 中,我们以创建类的形式创建数据表。操作类就可以操作数据库。实现量ORM对象关系映射,这里实现量对象与数据库的映射。在django里面不需要编写sql语句数据库
models的编写:
from __future__ import unicode_literals
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32,default='title')
content = models.TextField(null = True)
创建完models后,执行命令:
python manage.py makemigrations app(名) (准备,如果不叫app名,默认该项目下所有都生成该数据)
python manage.py migrate (迁移)
生成数据表
在数据库中插入一组数据:
insert into blog_article(id,title,content) values(1,"haha",'lllll');
继续在views.py中编写代码:
# encoding:utf-8
from django.shortcuts import render #xuan ran
from django.http import HttpResponse
from . import models
def index(request):
article = models.Article.objects.get(pk=1)#pk是主键,可以改成其他字段,就是获取pk为1的那个字段
return render(request,'index.html',{'article':article})#请求,网页模板,网页模板的参数
修改index.html,可以直接以对象的形式传入:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello hahaha</title>
</head>
<body>
<h1>{{article.title}}</h1>
<h3>{{article.content}}</h3>
</body>
</html>
10.创建超级用户:
python manage.py createsuperuser
11.在models下面添加如下,用于返回对象题目在页面:
def __unicode__(self):
return self.title
12.直接上代码了:
编写index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello hahaha</title>
</head>
<body>
<h1>
<a href="{% url 'blog:edit_page' 0%}">新文章</a>
</h1>
{% for article in articles %}
<a href="{% url 'blog:article_page' article.id %}">{{ article.title }}</a>
<br/>
{% endfor%}
</body>
</html>
编写article_page.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Article_page</title>
</head>
<body>
<h1>{{article.title}}</h1>
<br/>
<h3>{{article.content}}</h3>
<br/><br/>
<a href="{% url 'blog:edit_page' article.id %}">修改文章</a>
</body>
</html>
编写edit_page.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Edit page</title>
</head>
<body>
<form action="{% url 'blog:edit_action' %}" method="POST">
{% csrf_token %}
{% if article %}
<input type="hidden" name="title" value="{{article.id}}"/>
<label>
文章标题
<input type="text" name="title" value="{{article.title}}"/>
</label>
<br/>
<label>
文章内容
<input type="text" name="content" value="{{article.content}}"/>
</label>
<br/>
{% else %}
<input type="hidden" name="title"/>
<label>
文章标题
<input type="text" name="title"/>
</label>
<br/>
<label>
文章内容
<input type="text" name="content"/>
</label>
<br/>
{% endif %}
<input type="submit" value="提交"/>
</form>
</body>
</html>
编写blog/urls.py:
# encoding:utf-8
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index),#约素一个url
url(r'^article/(?P<article_id>[0-9]+)$',views.article_page,name='article_page'),
url(r'^edit/(?P<article_id>[0-9]+)$',views.edit_page,name='edit_page'),
url(r'^edit/action$',views.edit_action,name='edit_action'),
]
编写views.py:
# encoding:utf-8
from django.shortcuts import render #xuan ran
from django.http import HttpResponse
from . import models
def index(request):
articles = models.Article.objects.all() #返回的是django内置的一个集合,简单理解是列表
return render(request,'index.html',{"articles":articles})#请求,网页模板,网页模板的参数
def article_page(request,article_id):
article = models.Article.objects.get(pk=article_id)
return render(request,'article_page.html',{"article":article})
def edit_page(request,article_id):
#后台接受表单的过程就是接受http夹带的数据信息
if str(article_id) == '0':
return render(request,'edit_page.html')
article = models.Article.objects.get(pk=article_id)
return render(request,'edit_page.html',{'article':article})
def edit_action(request):
title = request.POST.get('title','TITLE')
content = request.POST.get('content','CONTENT')
article_id = request.POST.get('article_id','0')
if article_id == '0':
models.Article.objects.create(title=title,content=content)
articles = models.Article.objects.all()
return render(request,'index.html',{"articles":articles})
article = models.Article.objects.get(pk=article_id)
article.title = title
article.content = content
article.save()
return render(request,'article_page.html',{"article":article})
简易博客初步完成了
django 中的知识:
创建app中的templates要多创建一层子目录,方便以后的项目命名
Django rest framework 序列化
安装pip install djangorestframework
相关文档:http://www.jianshu.com/p/9d6a75855e5f