Django开发-1

环境安装和配置

pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install virtualenvwrapper-win
mkvirtualenv web  #创建虚拟环境
workon web  #切换到虚拟机环境
pip install django==2.2.7

#settings.py
ALLOWED_HOSTS = ['*']
LANGUAGE_CODE = 'zh-hans'
#TIME_ZONE = 'UTC'
USE_TZ = False

应用环境配置

创建应用

>cd <项目目录>
>python manage.py startapp blog

  • migrations

    迁移文件集合

  • admin.py:项目的后台

  • apps.py:应用设置

  • models.py:模型(数据库)

  • views.py:视图(页面请求和响应)

注册应用

  • 修改settings.py
INSTALLED_APPS = [
   ...
    'blog.apps.BlogConfig'
]

数据库配置

  • 启动mysql服务

  • [shuyun@master ~]$ sudo service mysqld start
    Starting mysqld:                                           [  OK  ]
    
    
    • 数据库连接参数:
      • 用户: root
      • 密码:123456
      • 端口:3306
  • 确认虚拟机IP

[shuyun@master ~]$ ifconfig
eth5      Link encap:Ethernet  HWaddr 00:50:56:3A:1F:12  
          inet addr:192.168.89.200  Bcast:192.168.89.255  Mask:255.255.255.0

  • settings.py完成mysql配置

    • 开发环境

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

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'blog',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'192.168.89.200',
        'PORT':3306,
    }
}

安装pymysql

pip install PyMySQL 

修改blogproj/init.py

import pymysql 
pymysql.install_as_MySQLdb()

创建数据库和授权

[root@master ~]# mysql -uroot -p123456
mysql> create database blog;
mysql> grant all on blog.* to root@'%' identified by '123456';

创建管理员账号

用户:admin,密码:admin

python manage.py createsuperuser

数据模型

在models.py中完成如下配置

博客模型

from django.db import models
from django.contrib.auth.models import User

#文章类别
class Category(models.Model):
    #默认自动生成id字段作为主键
    name = models.CharField(verbose_name='名称', max_length=100)

#标签
class Tag(models.Model):
    #默认自动生成id字段作为主键
    name = models.CharField(verbose_name='名称', max_length=100)

class Post(models.Model):
    title = models.CharField(verbose_name='标题', max_length=100)
    body = models.TextField(verbose_name='正文') #TextField存储大段文本
    create_time = models.DateTimeField(verbose_name='创建时间')
    modified_time = models.DateTimeField(verbose_name='修改时间')
    excerpt = models.CharField(verbose_name='摘要',max_length=255)
    category = models.ForeignKey(Category, on_delete=models.CASCADE,verbose_name='类别') #一对多
    tags = models.ManyToManyField(Tag, blank=True,verbose_name='标签') #多对多
    author = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')

数据库迁移

python manage.py makemigrations #创建迁移文件
python manage.py migrate #迁移到数据库

ORM操作

存数据

>python manage.py shell
In [1]: from blog.models import Category,Tag,Post
#写入类别
In [2]: cate = Category(name='test cate1')
In [3]: cate.save()
#写入标签
In [4]: tag = Tag(name='test tag1')
In [5]: tag.save()
#写入博客
In [2]: from django.contrib.auth.models import User
In [8]: from django.utils import timezone
In [4]: user = User.objects.get(username='admin')
In [7]: post = Post(title='title_test1',body='body_test1',create_time=timezone.now(),modified_time=timezone.now(),category=cate,author=user)
post.save()

读数据

#读取category
In [18]: cateall = Category.objects.all()
In [19]: cateall
Out[19]: <QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>
In [20]: cateall[0]
Out[20]: <Category: Category object (1)>
In [21]: cateall[0].name
Out[21]: 'test cate1'
#TODO练习:读取post的body数据
In [22]: post = Post.objects.all()
In [23]: post[0].body
Out[23]: 'body_test1'

删数据

#删类别
In [24]: cate1 = Category.objects.get(name='test cate1')
In [26]: cate1.delete()
Out[26]: (1, {'blog.Category': 1})
#TODO练习:删除post数据
In [27]: post = Post.objects.get(id=1)

In [28]: post.delete()
Out[28]: (1, {'blog.Post_tags': 0, 'blog.Post': 1})

视图

视图函数

  • 修改了blog/views.py

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("欢迎学习Django!")
    
    

URL绑定

  • 配置项目URL:blogproj/urls.py

    ....
    from django.conf.urls import url,include
    
    urlpatterns = [
        ...
        url(r'',include('blog.urls'))
    ]
    
    
  • 在blog项目目录下创建urls.py文件

    • 添加代码

      from django.conf.urls import url,include
      from . import views
      
      urlpatterns = [
          url(r'', views.index, name='index')
      ]
      
      
  • 启动开发服务

    python manage.py runserver #默认8000端口
    #Starting development server at http://127.0.0.1:8000/
    python manage.py runserver 127.0.0.1:8001 #指定端口启动
    
    

    浏览器访问


模板系统

模板指静态页面(html)

静态文件:css、js

  • 创建templates/blog目录,新建index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{ title }}</title>
    </head>
    <body>
    <h1>{{ welcome }}</h1>
    </body>
    </html>
    
    
{{ title }},{{ welcome }}:模板变量

  • 修改views.py
def index(request):
    context = {'title':"Dylan的Blog", 'welcome':'欢迎来到我的博客'}
    return render(request, 'blog/index.html', context=context)

  • 刷新页面


博客首页

静态文件

  • 拷贝模板
    • 项目目录下创建static/blog目录
    • 拷贝css和js到上述目录
    • 拷贝index.html到templates/blog目录
  • 修改settings
STATIC_ROOT = os.path.join(BASE_DIR,'static')  #新增

  • 修改index.html
{% load static %}
...
    <!-- css -->
    <link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">
    <link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
    <link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">
    <link rel="stylesheet" href="{% static 'blog/css/custom.css' %}">

    <!-- js -->
    <script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>
    <script src="{% static 'blog/js/bootstrap.min.js' %}"></script>
    <script src="{% static 'blog/js/pace.min.js' %}"></script>
    <script src="{% static 'blog/js/modernizr.custom.js' %}"></script>
</head>
...
<script src="{% static 'blog/js/script.js' %}"></script>
</body>
...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容