前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAOMS系统搭建(一)

SAOMS系统搭建(一)

作者头像
py3study
发布2020-01-06 12:05:23
9340
发布2020-01-06 12:05:23
举报
文章被收录于专栏:python3

SAOMS系统搭建

采用python3.6 + django2.1 + pycharm

  • Django采用M(model: 数据存取层) T(template: 业务逻辑层) V(views: 表现层)

初始化项目

代码语言:javascript
复制
1. 首先要确保有pip包管理工具
2. virtualenv: pip install virtualenv, python虚拟环境
3. mkvirtualenv <project_name>创建虚拟环境
4. workon <env_name> 进入虚拟环境
5. pip install xxx 安装依赖包,配置项目环境
6. django-admin startproject <pro_name> 创建项目
7. 进入项目目录, python manage.py help 查看manage.py的功能
8. python manage.py runserver 80 启动项目,默认端口8000
9. 访问 127.0.0.1:80,项目创建成功

创建应用

代码语言:javascript
复制
python manage.py startapp <app_name>
目录结构:
-SAOMS

--app

---migrations
----__init__.py

---__init__.py
---admin.py
---models.py
---views.py
---apps.py
---tests.py

--manage.py

--SAOMS
---settings.py
---wsgi.py
---urls.py

项目settings.py配置

代码语言:javascript
复制
1. INSTALL_APPS添加刚才创建的app
2. STATIC_URL = 'static' 静态资源的起始URL,其static文件只能在app里
3. STATICFILES_DIR = [os.path.join(BASE_DIR, 'public_static'), ] 可选配置属性,
4. STATIC_ROOT = os.path.join(BASE_DIR, 'all_static') 用于生产部署的时候,开发时用不太到

5. 模板路径,tamplates,根目录下放公共的模板,app目录下放各自app独立的模板
'DIRS': [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'home/templates'),
                 os.path.join(BASE_DIR, 'student/templates'), ],
                 
6. 数据库配置
django.db.backends.postgresql/mysql/sqlite3/oracle
default为默认数据库,也可以链接多个数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name',
        'USER': 'root',
        'PASSWORD': '****',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
    
    'myDJANGO': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': <name>,
        'USER': 'root',
        'PASSWORD': '*****',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }

7. 中间件,处理request和response对象的钩子,中间件的作用主要使处理用户请求信息,也可以自定义中间件,添加到配置属性即可。

编写URL(统一资源定位符)规则

  1. 在每个app文件夹中设置独立的静态资源和模板文件夹并添加一个urls.py文件
  2. 根目录下urls.py
代码语言:javascript
复制
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),
]
  1. app中的urls.py
代码语言:javascript
复制
from django.urls import path
from . import views


urlpatterns = [
    path('', views.index),
]

# app 的views中的代码
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')
  1. 带变量的URL

例如带有日期的url

  • url的变量类型又字符类型,整型,slug, uuid,最常用的使字符类型和整型。

path('<year>/<int:month>/<slug:day>', views.mydate)

  • 也可以使用正则表达式来规范化数据格式
代码语言:javascript
复制
from django.urls import path, re_path

re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.mydate)

URL末端使用正则表达式,应在末端加上斜杠或其他字符,否则无法生效。
  • 设置参数name,
代码语言:javascript
复制
views.mydate, name='mydate'),

<div>
    <a href="/2019/09/10.html">2019 pld achieve</a>
</div>
    <a href="{% url 'mydate' 2019 %}">2019 achieve</a>
</div>
  • 设置额外参数
代码语言:javascript
复制
1. 除了name之外,还有参数类型是以字典的数据类型传递的只能在视图函数中读取和使用

视图探究

  1. render, render_to_response, redirect
代码语言:javascript
复制
def index(request):
    return render(request, 'template2/index.html', context={'title': '首页'}, status=500)
  1. render(request, template_name, context = None, content_type = None, status = None, using = None)
  2. 数据可视化
  • 与model实现数据交互,读取并处理后台数据,最后生成HTML页面返回给用户。
代码语言:javascript
复制
# coding=utf-8

from django.db import models

# Create your models here.

class Product(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=50)
    type = models.CharField(max_length=20)

# views.py

from models import Product
def index(request):
    type_list = Product.objects.values('type').distinct()
    name_list = Product.objects.values('name', 'type')
    context = {'title': '首页', 'type_list': type_list, 'name_list': name_list}
    return render(request, 'template2/index.html', context=context, status=200)
  1. 通用视图
代码语言:javascript
复制
TemplateView: 直接返回HTML模板,无法将数据库的数据展示出来
ListView: 将数据库数据传递给HTML模板,通常获取某个表的所有数据
DetailView: 通常获取数据表的单条数据

深入模板

Django模板,Jinja2模板语言(http://docs.jinkan.org/docs/j...

  1. 变量和标签
代码语言:javascript
复制
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{ title }}</title>
    {% load staticfiles %}
    <link rel="icon" href="{% static "img/hw.ico" %}">
    <script src="{% static "js/hw_index.js" %}"></script>
</head>
<body>
    <ul>
        {% for type in type_list %}
        <li>
            <h3><a href="#">{{ type.type }}</a></h3>
            <p>
                {% for name in name_list %}
                {% if name.type == type.type %}
                <span>{{ name.name }}</span>
                {% endif %}
            {% endfor %}
            </p>
        </li>
        {% endfor %}
    </ul>
</body>
  1. 常用标签
代码语言:javascript
复制
{% for %}:遍历
{% if %}:条件判断
{% csrf_token %}:生成csrf_token标签,防护跨站请求伪造攻击
{% url 'index' <kwargs> %}:引用路由配置地址
{% with %}:将变量名重新命名
{% load %}:加载导入Django的标签库
{% static %}:读取静态资源的文件内容
{% extends xxx %}:模板继承,xxx为模板文件名
{% block xxx %}:重写父类模板的代码

3.模板继承

代码语言:javascript
复制
{% extends "base.html" %}
{% block body %}
<a href="{% url 'index' target="_blank %}"></a>
{% endblock %}
  1. 自定义过滤器
代码语言:javascript
复制
{{ variable | filter | lower }}

项目新建user_defined文件夹
----templatetags文件夹
----__init__.py
----myfilter.py

在settings.py中INSTALL_APPS中添加'user_defined'

# myfilter.py
from django import template
# 注册过滤器,声明模板对象
register = template.Library()
#声明并定义过滤器
@register.filter
def myreplace(value, args):
    oldValue = args.split(':')[0]
    newValue = args.split(':')[1]
    return value.replace(oldValue, newValue)

models模块,模型与数据库

[models详细介绍: https://blog.csdn.net/qq_3704...]

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SAOMS系统搭建
    • 采用python3.6 + django2.1 + pycharm
      • 初始化项目
        • 创建应用
          • 项目settings.py配置
            • 编写URL(统一资源定位符)规则
              • 视图探究
                • 深入模板
                  • models模块,模型与数据库
                  相关产品与服务
                  消息队列 TDMQ
                  消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档