Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

零、安装

  pip install django

一、创建django程序

  • 终端命令:django-admin startproject sitename
  • IDE创建Django程序时,本质上都是自动执行上述命令

其他常用命令:

  python manage.py runserver 0.0.0.0  # 开始程序
  python manage.py startapp appname  # 程序内部增加新app
  python manage.py syncdb
  python manage.py makemigrations  # 确认最新models的配置,如果与上一记录版本有出入,则生成新一版记录,与下面的migrate配对使用

  python manage.py migrate  # 根据信一半记录,修改数据库

  python manage.py createsuperuser  # 创建admin用户

启动程序

# dev
python manager.py startapp 0.0.0.0:8000 # master
gunicorn -w 4 xxadmin.wsgi # 4是cpu核数 # 下面是根据dev和master环境更改settings.py文件
wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxadmin.prod') manager.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxadmin.dev') # settings.py里的STATIC相关部分改成这样 STATIC_URL = '/static/'
if DEBUG:
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
else:
STATIC_ROOT = os.path.join(BASE_DIR, "static") # 对应的url改成这样
if not settings.DEBUG:
# 这里没必要,如果是prod环境,则需要在nginx做指向,这里临时这样写
urlpatterns += re_path(r'^static/(?P<path>.*)$', static.serve,
{'document_root': settings.STATIC_ROOT}, name='static'),
# dev环境由于STATICFILES_DIRS,不用上面这一步

二、程序目录

三、配置文件

1.数据库

############### settings.py ###############
# 使用sqllite,django默认
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
} # 使用mysql *******
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
} ############### __init__.py ###############
# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替 # 如下设置放置的与project同名的配置的 __init__.py文件中 import pymysql
pymysql.install_as_MySQLdb() 

2.模版

############### settings.py ###############
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,'templates'),
)

3.静态文件(自定义放置插件的路径)

STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)

4.新增app

################# settings ###############
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config', # 注册app
]

四、直接执行某script

# -*- coding:utf-8 -*-
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tmp_dj.settings") # NoQA
import django
django.setup() # NoQA if __name__ == '__main__':
''' 这里可以写django的逻辑,不需要侦听web端口了 '''
# -*- coding:utf-8 -*-
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tmp_dj.settings") # NoQA
import django
django.setup() # NoQA if __name__ == '__main__':
from taiyingshi import models
import json
from django.db import transaction
from utils import logger
import re
import time error_log = logger.logger("error") dir = r"D:\临时\爬虫\scrapy\taiyingshi"
dir_walk = os.walk(dir) def get_duration(t):
if not t: return 0
h = re.findall("(\d+)小时", t)
h = 0 if not h else h[0]
M = re.findall("(\d+)分钟", t)
M = 0 if not M else M[0]
return int(h) * 60 + int(M) file_name_list = next(dir_walk)[2]
# print(len(file_name_list)) # 49666
movie_obj_list = models.Movie.objects.all()
movie_url_set = set(map(lambda obj:obj.url,movie_obj_list)) for idx,file_name in enumerate(file_name_list):
file_path = os.path.join(dir, file_name)
with open(file_path) as f:
movie_dict = json.load(f)
print(idx, movie_dict.get("movie_name"))
if movie_dict["movie_url"] not in movie_url_set:
try:
release_time = movie_dict.get("movie_year")
try:
release_time = time.strftime("%Y-%m-%d", time.strptime(release_time, "%Y"))
except:
release_time = None context = {
"name": movie_dict.get("movie_name"),
"url": movie_dict.get("movie_url"),
"release_time": release_time, # 直接格式化即可,这里顺便复习一下time模块
"length": get_duration(movie_dict.get("movie_length")),
"rate_douban": movie_dict.get("movie_rate_douban") or None,
"douban_link": movie_dict.get("movie_douban_link"),
"rate_imdb": movie_dict.get("movie_rate_imdb") or None,
"imdb_link": movie_dict.get("movie_imdb_link"),
"download_links": "\n".join(movie_dict.get("movie_download_list")),
} with transaction.atomic():
district = movie_dict.get("movie_district")
district_obj = models.District.objects.filter(district=district).first()
if not district_obj:
district_obj = models.District.objects.create(district=district) movie_obj = models.Movie.objects.create(district=district_obj, **context) # 从爬虫发过来的type set
movie_type_set = set(movie_dict.get("movie_type_list"))
# db里所有的type objs
movie_type_obj_list = models.Movie_type.objects.all()
# 转为set
movie_type_in_db_set = set(map(lambda obj: obj.movie_type, movie_type_obj_list))
# 需要新增的type
movie_type_to_db_set = movie_type_set - movie_type_in_db_set
# 增加新的type
if movie_type_to_db_set:
models.Movie_type.objects.bulk_create(
[models.Movie_type(movie_type=movie_type) for movie_type in movie_type_to_db_set])
# 增加m2m关系
if movie_type_set:
objs = models.Movie_type.objects.filter(movie_type__in=movie_type_set).all()
movie_obj.movie_types.add(*objs) # 没有手动增加的第三张表才能使用这样的添加方法 # 从爬虫发过来的language set
language_set = set(movie_dict.get("movie_language_list"))
# db里所有的language objs
language_obj_list = models.Languages.objects.all()
# 转为set
language_in_db_set = set(map(lambda obj: obj.language, language_obj_list))
# 需要新增的language
language_to_db_set = language_set - language_in_db_set
# 增加新的language
if language_to_db_set:
models.Languages.objects.bulk_create(
[models.Languages(language=language) for language in language_to_db_set]
)
# 增加m2m关系
if language_set:
language_objs = models.Languages.objects.filter(language__in=language_set).all()
models.Movie_m2m_Language.objects.bulk_create(
[models.Movie_m2m_Language(movie=movie_obj, language=language_obj) for language_obj in
language_objs]) # 从爬虫发过来的actor set
actor_set = set(movie_dict.get("movie_actor_list"))
# db里所有的actor objs
actor_obj_list = models.Actors.objects.all()
# 转为set
actor_in_db_set = set(map(lambda obj: obj.name, actor_obj_list))
# 需要新增的actor
actor_to_db_set = actor_set - actor_in_db_set
# 增加新的actor
if actor_to_db_set:
models.Actors.objects.bulk_create(
[models.Actors(name=actor) for actor in actor_to_db_set])
# 增加m2m关系
if actor_set:
actor_objs = models.Actors.objects.filter(name__in=actor_set).all()
models.Movie_m2m_Actor.objects.bulk_create(
[models.Movie_m2m_Actor(movie=movie_obj, actor=actor_obj) for actor_obj in actor_objs]
) # 从爬虫发过来的director set
director_set = set(movie_dict.get("movie_director_list"))
# db里所有的director objs
director_obj_list = models.Directors.objects.all()
# 转为set
director_in_db_set = set(map(lambda obj: obj.name, director_obj_list))
# 需要新增的director
director_to_db_set = director_set - director_in_db_set
# 增加新的director
if director_to_db_set:
models.Directors.objects.bulk_create(
[models.Directors(name=director) for director in director_to_db_set])
# 增加m2m关系
if director_set:
director_objs = models.Directors.objects.filter(name__in=director_set).all()
models.Movie_m2m_Director.objects.bulk_create(
[models.Movie_m2m_Director(movie=movie_obj, director=director_obj) for director_obj in
director_objs])
movie_url_set.add(movie_dict["movie_url"])
except Exception as e:
error_log.error("{} {}".format(movie_dict["movie_url"],str(e)))

实例,之前测试的script,把一些字典dump成的file传入db

依赖库

sudo apt-get install python3-dev libmysqlclient-dev

django之基本配置的更多相关文章

  1. Django的安装配置和开发

    参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...

  2. django之uWSGI配置 +Nginx

    参考文档 官方文档   安装: pip install uwsgi 启动命令: 方法一.直接命令启动 /home/zabbix/application/python/bin/uwsgi --socke ...

  3. django mysql 数据库配置

    在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库. DATABASES = { 'default': { 'ENGINE': 'django.db. ...

  4. 55 Django静态文件配置

    一.Django静态文件配置 1.项目文件夹,新建一个文件夹statics 文件夹 2.在配置文件settings.py中,配置: 文件中有第句: STATIC_URL = '/static/'#静态 ...

  5. Django 静态文件配置 (Nginx)

    初学Django,在访问静态文件时候遇到很多误区,一直配置不成功,在此记录一下. Django静态文件访问分为两种:一种是Debug模式下,测试开发网站时对静态文件的访问,一种是实际生产环境中对静态文 ...

  6. python3-开发进阶Django-debug-toolbar的配置和Django logging的配置

    阅读目录 django-debug-toolbar的配置 Django logging的配置 一.django-debug-toolbar的配置 1.介绍 django-debug-toolbar 是 ...

  7. django 自定义日志配置

    如果不想使用 python 的 dictConfig 格式来配置 logger,可以制定自己的配置架构. LOGGING_CONFIG 配置定义了用来配置 django logger 的可调用函数,默 ...

  8. Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)

    摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作,暂时全部 ...

  9. Django + Apache + wsgi配置和环境搭建(ubuntu)

    上一篇写了Django + nginx + uwsgi配置和环境搭建(ubuntu) 由于公司服务器环境问题,又配置了apache的环境.记录例如以下: 一. 安装环境: #apache sudo a ...

  10. py文件单独调试django ORM的配置

    1.新建一个py文件 2.代码环境搭建 import os if __name__ != '__main__': exit() # 加载django项目的配置信息 os.environ.setdefa ...

随机推荐

  1. 正则匹配与替换 regexp & regsub

    正则匹配是使用正则表达式匹配字符串的一种方法:在脚本编写过程中,经常需要处理一些文本,而这些文本中可能只有部分信息是有用的,我们需要从文本中提取出这些有用信息:这时候,就需要编写特定格式的正则表达式, ...

  2. Sublime Text常用设置之个人配置

    一.安装 1.安装包下载:  http://www.sublimetext.com/3 (傻瓜式安装) 2.Package Control安装: 1)Ctrl+~或者View——Show Consol ...

  3. OpenGL ES天空盒子效果

    一.理解 利用GLKBaseEffect,自定义顶点着色器和片元着色器,结合天空盒子,展示效果 二.技术代码 CCSkyBoxEffect:天空盒子效果类: CCSkyboxShader.vsh:顶点 ...

  4. Linux基础-6.系统的启动过程

    Linux启动时我们会看到许多启动信息 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导 运行init 系统初始化 建立终端 用户登录系统 init程序的类型: ...

  5. PHP访问数缓存处理

    利用Redis或Memcache作为MySQL的缓存,采用是ThinkPHP框架. 方法一 采用ThinkPHP的S方法: $savedata['uid']=session('uid'); $save ...

  6. 实验吧web天网管理系统

    直接查看源码 <!--$test=$_GET['username']>这一行 源码的下面给了我们一些提示:我们输入的username经过md5加密后会赋值给test.当test为0时就会跳 ...

  7. RNA-seq简单处理流程

    RNA_seq pipline RNA_seq pipline PeRl 2018年3月7日 首先说明一下我做RNA-seq处理流程的文件树格式: RNA-seq/ data/ GRCh38.gtf ...

  8. 20155229 《信息安全系统设计基础》 Mypwd实现

    Mypwd 内容 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 学习pwd命令 通过man pwd查看 pwd命 ...

  9. [二进制trie][贪心]CSUOJ1216异或最大值

    题目传送门 过了好久,终于重新开始写博客了... 这是一道二进制trie树的模板题. 二进制trie树,理解一下就是一颗二叉树,左右儿子为0或1. 然后每插入一个数就进行一次Find操作. Find: ...

  10. PyQt5 笔记(04):主窗口卡死问题

    本文基于:windows 7 + python 3.4 知识点: 1. 将 time.sleep 替换为 QTimer 2. 将 time.sleep 放入到 QThread 3. 使用 QThrea ...