python之django连接已有SQLserver简单实例创建
作为初学者,记录下自己的摸索过程,与也正在学习的同伴分享。环境为windwos7。
一、设置python系统变量、创建文件夹、venv环境
博客没有小剪刀截图 甚是麻烦,尽量就手敲。
1,在系统变量中添加‘D:\python64\’,这是我的python安装目录。
2,新建放置django的文件夹,比如‘F:\mytest’。
3,启动CMD,cd 到 'F:\mytest。
命令一:python -m venv myven 创建名为myven的环境
二,安装django以及依赖包
1,依然CMD,cd 到 'F:\mytest。“myven\scripts\activate”激活django的环境,“pip install django”, “pip install pyodbc”,“pip install django-pyodbc-azure” ,这里尽量分开pip,因为安装django-pyodbc-azure时,会自动选择合适的django版本,你将会看到它自行卸载django并安装合适的django版本。
这里很多小伙伴包括我都入过坑,什么提示backends错误,在配置settings的时候可没少费劲。
三,新建django项目,新建app
此时已经可以打开pycharm,用控制台命令Terminal。
此时还有一个小坑,直接“python django-admin startproject myproject .”是不行的,因为你这个django-admin.py 没有设置为系统变量,所以就直接把myven里面(自己找吧)的django-admin.py复制到 “F:\mytest”下面。然后控制台输入“python django-admin.py startproject myproject .”即可,这里命令最后有一个点,不要忘掉,记不清怎么回事了,反正要带上。
然后“python manage.py startapp myapp” 新建了一个myapp。
四,连接到已经存在的数据库。
当然这里也可以migrate迁移一个新的数据库,咱现在是连接到一个老数据库。
1,设置django的settings ,到这里不能光靠记忆写了,得copy代码。
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'yourdatabase',
'USER': 'sa',
'PASSWORD': ',123456',
'HOST': '127.0.0.1',
'PORT': '1433',
'OPTIONS': {
'driver': 'SQL Server Native Client 11.0',
'MARS_Connection': True,
很多其他的博客,在这里做了很多功夫,诸如backends不存在的连接方式。
2,控制台命令“python manage.py inspectdb”,接着“python manage.py insepctdb>models”,运行完之后数据库中的表都在根目录下的models中建好类了。
到此时之后的views,url,html 就可以参照其他django实例来了。
好,就到这吧。除了代码截图,其他都是记忆写的,可能会出现疏漏,但大体步骤是错不了了。
-------------
开开启django时,使用0.0.0.0:xxxx,作为ip和端口
例如:python manage.py runserver 0.0.0.0:9000
然后在settings里修改ALLOWED_HOSTS= [],
改为ALLOWED_HOSTS= ['*',],注意不要漏掉“,”。
其他机器就可以通过这台机器的ip和端口号访问django了
celery 定时任务:
##celery.py
from celery.schedules import crontab
from datetime import timedelta
app.conf.update(
CELERYBEAT_SCHEDULE = {
'taska': {
'task': 'login.tasks.add',
'schedule': timedelta(seconds=3),
'args': ()
}
}
)
##settings
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_MAX_TASKS_PER_CHILD = 10
CELERY_IMPORTS = ("login.tasks",)
另外pip install eventlet
####app中tasks.py
from celery import shared_task
from login import views
@shared_task
def add():
views.test_a()
print('111111111111')
####views.py 防止任务未完成时重复执行
from celery_once import QueueOnce
@celery_app.task(base=QueueOnce, once={'graceful': True})
def test_a():
time.sleep(10)
print('done!!!!!!!!!!!!!!!!')