美文网首页
django使用笔记

django使用笔记

作者: zzjack | 来源:发表于2017-10-20 14:20 被阅读0次

教程地址:http://code.ziqiangxuetang.com/django/django-views-urls.html

创建app

(windows环境,pycharm编辑器,python为3.6)

  1. 安装django, cmd -> pip install django
  2. 选择你想创建的地址,cmd -> cd packagePath
  3. 创建project,django-admin startproject crawler(注:crawler为project name)
  4. 创建app,cd crawler,然后执行 python manage.py startapp appCrawler
  5. 把app注册crawler/settings.py中的INSTALL_APPS中
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appCrawler', //在此添加
]

定义视图函数

  1. appCrawler/views.py定义视图函数
from django.http import HttpResponse
def index(request):
    return HttpResponse("hello world")

2.给这个视图函数定义1个url。crawler/urls.py下添加如下内容:

//最好起个别名,以便后期如果有多个app应用时容易区分
from appCrawler import views as crawlerView
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^test/',crawlerView.index), //‘test’就是url
]

3.运行测试看是否正常python manage.py runserver,浏览器打开http://127.0.0.1:8000/test/查看页面结果。

mysql数据库

说白了,这玩意就是django的orm,没什么难的。

进行下列步骤之前,需要先更改数据库配置,因为django默认使用的是sqlite。

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

把这个做如下配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #设置为mysql数据库
        'NAME': 'dmyz',  #mysql数据库名
        'USER': 'root',  #mysql用户名,留空则默认为当前linux用户名
        'PASSWORD': '',   #mysql密码
        'HOST': '',  #留空默认为localhost
        'PORT': '',  #留空默认为3306端口
    }
}
  1. appCrawler/models.py,创建表结构。
//  id这行一般是不用自己定义的。创建表时,django会自动生成。
class HdWebloan(models.Model):
    ori_data = models.TextField()
    flag = models.CharField(max_length=20)
    ctime = models.DateField()
  1. 运行命令,在数据库中创建表。
python manage.py makemigrations 
python manage.py migrate

这时你可以打开数据库验证下,你创建的表是否存在了。这个表的名字是
"appName"+"_"+"className",比如我创建的就是"appCrawler_hdwebloan".

table表删除了怎么办

以我刚才创建的app,appCrawler为例。

  1. 删除appCrawler目录下的除init以外的所有文件。
  2. 在这个数据库下找到表django_migration,删除你创建应用的那条数据,比如我就删除了appCrawler所在的这行数据。
  3. 重新执行命令:
python manage.py makemigrations 
python manage.py migrate

数据库换了机器怎么办

  1. 修改数据库相关的配置
  2. python manage.py migrate

response

一般是HTTPResponse类型的对象,也可以JsonResponse,StreamingHttpResponse,FileResponse类返回非http对象

狗日的csrf

我用postman模拟了一个post请求,总是403forbidden.花费了好长时间,才去仔细百度报错信息,发现是csrf错误。一共找到了三种解决办法。

  1. 加这几行代码,但是我没搞懂加在哪
class DisableCSRFCheck(object):
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)
  1. 使用装饰器,但是我写的是类视图
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

@csrf_exempt
def my_view(request):
    return HttpResponse('Hello world')
  1. 注释掉setting.py中的“django.middleware.csrf.CsrfViewMiddleware”,成功。

使用类视图

原因,视图函数真没什么意思。所以我用视图.
因为我写的是接口,必须是post请求。我用类视图的继承,帮我少些了好几行代码,还便于修改。

from django.views.generic.base import View

class myView(View):
    illegal_request_resp = {"errCode":"400","errMsg":"only accept post method"}
    def get(self,request):
        return JsonResponse(self.illegal_request_resp)

class HD_EMW025(myView):
    def post(self,request):
        return HttpResponse("hello world")

allow host

这个也要配置,不然可能会不允许访问。

配置多个数据库。

在settings.py default里面添加新的。
然后注意插入数据的时候,要加上db.save(using="settingsDatabaseName")

多个数据库下使用migrate

manage.py migrate --database=databaseModuleName

时区问题

插入数据库的数据发现时间错误,setting.py设置

USE_TZ = False

models.py设置

ctime = models.DateTimeField(auto_now_add=True)

注意,auto_now_add和auto_now是不同的,具体可以查文档。

多个数据库如何删除表数据

删除表中全部数据

moduleName.objects.using("setting中配置的数据库名").all().delete()

如何自定义创建表的表名和列名

  • 列名,用db_column。注意,自定义的表名不要是modules这种关键字,如果命名为modules,在执行python manage.py makemigrations.
model_s = models.CharField(max_length=50,db_column='my_model')

+表名
在module模块下,添加一个Meta子类。

class Meta:
  db_name="XXX"

相关文章

网友评论

      本文标题:django使用笔记

      本文链接:https://www.haomeiwen.com/subject/xipmuxtx.html