django学习

Posted 永远的麦田

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django学习相关的知识,希望对你有一定的参考价值。

参考资料:http://www.cnblogs.com/feixuelove1009/p/5910384.html#top

本学习只在记录过程,需要更全面的资料,可直接上参考资料细看。

django版本为1.10.8

python版本为3.5.3

1、安装django

1)先清理老版本

如果之前安装过django版本,为了简单起见,直接删除先

我之前安装的目录在:C:\\Program Files\\Anaconda3\\envs\\python3.5.3\\Lib\\site-packages

image

全删了

然后在命令行中输入命令:python -m django --version

image

2)安装新版本

命令行中输入:pip install django==1.10.i8

image

安装完成后,输入命令确认版本:python -m django –version

image

 

2、生成简单的工程:

进入你指定的某个目录,运行下面的命令:django-admin startproject mysite

image

进入mysite目录,输入下面的命令:python manage.py runserver

image

至此,一个简单的web服务器就写好了,打开浏览器,输入localhost:8000

image

 

3、创建简单的投票程序

1)创建app

在命令行中输入命令:python manage.py startapp polls

image

运行完成后看到mysite目录下已经生成了polls目录和相应文件:

image

 

2) 编写视图

在polls/views.py文件中,输入下列代码:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You\'re at the polls index.")

为了调用该视图,我们还需要编写urlconf。现在,在polls目录中新建一个文件,名字为urls.py,在其中输入代码如下:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r\'^$\', views.index, name=\'index\'),
]

下一步是让项目的主urls文件指向我们建立的polls这个app独有的urls文件,你需要先导入include模块,打开mysite/urls.py文件,代码如下:

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

urlpatterns = [
    url(r\'^polls/\', include(\'polls.urls\')),
    url(r\'^admin/\', admin.site.urls),
]
然后输入命令,python manage.py runserver
打开浏览器,输入:http://localhost:8000/polls/
运于结果如下:
image
 

 

4、数据库安装

1)创建模型

polls/models.py

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(\'date published\')

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

2) 激活模型

mysite/settings.py中

INSTALLED_APPS = [
\'polls.apps.PollsConfig\',
\'django.contrib.admin\',
\'django.contrib.auth\',
\'django.contrib.contenttypes\',
\'django.contrib.sessions\',
\'django.contrib.messages\',
\'django.contrib.staticfiles\',
]

 

命令行中运行命令:python manage.py makemigrations polls

image

再运行命令:python manage.py sqlmigrate polls 0001

image

 

在运行最后的命令前:python manage.py migrate,我们稍微停留一下,考虑是接到哪一个数据库上。

当前接入的数据库为mysql,因此需要提前做一些准备。

在本地创建一个mysite数据库:(假译用户名:root,密码:root)

mysql -uroot -proot

create database test2 charset=utf8;

image

然后修改mysite/settings.py

DATABASES = {
    \'default\': {
        \'ENGINE\': \'django.db.backends.mysql\',
        \'NAME\': \'mysite\', #数据库名字,
        \'USER\': \'root\', #数据库登录用户名
        \'PASSWORD\': \'root\', #数据库登录密码,我自己修改了
        \'HOST\': \'localhost\', #数据库所在主机(公司中写真实主机地址)
        \'PORT\': \'3306\', #数据库端口
    }
}

 

需要说明的是,需要先安装mysql相应的库:

pip install mysqlclient

pip install pymysql

这样可确保无错误

执行:python manage.py migrate

数据库的通道打通: image

 

5、使用API

在当前目录下使用命令:python manage.py shell

image

然后可以用以下命令尝试:

>>> import django 

>>> django.setup()

>>> from polls.models import Question, Choice # 导入我们写的模型类
    # 现在系统内还没有questions
    >>> Question.objects.all()
    <QuerySet []>
    
    # 创建一个新的question
    # Django推荐使用timezone.now()代替python内置的datetime.datetime.now()
    from django.utils import timezone
    >>> q = Question(question_text="What\'s new?", pub_date=timezone.now())
    
    # 你必须显式的调用save()方法,才能将对象保存到数据库内
    >>> q.save()
    
    # 默认情况,你会自动获得一个自增的名为id的主键
    >>> q.id
    1
    
    # 通过python的属性调用方式,访问模型字段的值
    >>> q.question_text
    "What\'s new?"
    >>> q.pub_date
    datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
    
    # 通过修改属性来修改字段的值,然后显式的调用save方法进行保存。
    >>> q.question_text = "What\'s up?"
    >>> q.save()
    
    # objects.all() 用于查询数据库内的所有questions
    >>> Question.objects.all()
    <QuerySet [<Question: Question object>]>

前面显示的有不可读的内容,加__str__函数

polls/models.py

from django.db import models
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible # 当你想支持python2版本的时候才需要这个装饰器
class Question(models.Model):
    # ...
    def __str__(self):   # 在python2版本中使用的是__unique__
        return self.question_text
        
@python_2_unicode_compatible 
class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

 

6、创建管理员

image

需要创建的密码具有一定复杂性,否则会要求重新输入

启动开发服务器,在浏览器访问http://127.0.0.1:8000/admin/

image

点击进去是系统自带的界面:

image

 

注册投票应用:

打开polls/admin.py文件,加入下面的内容:

from django.contrib import admin
from .models import Question

admin.site.register(Question)

 

再次启动开发服务器,然后访问浏览器:http://127.0.0.1:8000/admin/

image

以上是关于django学习的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

Django REST框架--认证和权限

如何在 Django 中显式重置模板片段缓存?

使用 Django 模板作为片段

python 通过django片段很多很多

IOS开发-OC学习-常用功能代码片段整理