美文网首页
django笔记

django笔记

作者: 項少龍 | 来源:发表于2019-06-27 17:06 被阅读0次

项目 message

创建项目

django-admin startproject HelloWorld

添加apps

django-admin startapp TestModel

  • settings.py
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.message1.apps.Message1Config',
    'users.apps.UsersConfig',
    'courses',
    'organization',
    'operation',
    'xadmin',
    'crispy_forms',
    'captcha',
    'DjangoUeditor',
]
  • apps 下面 apps.py
from django.apps import AppConfig

class CoursesConfig(AppConfig):
    name = 'courses'
    verbose_name = "课程管理"

path url 区别

from django.urls import path
from django.conf.urls  import  url  #  等价于 from django.urls import re_path
    
url(r'^articles/(?P<year>[0-9]{4})/$',views.special_2003)

path("r'articles/<int:year>/',views.special_2003")

数据库migrate操作

$ python manage.py migrate   # 创建表结构
$ python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel   # 创建表结构
  • QuerySet
    是延迟获取的,只有当用到这个QuerySet时,才会查询数据库求值。另外,查询到的QuerySet又是缓存的,当再次使用同一个QuerySet时,并不会再查询数据库,而是直接从缓存获取(不过,有一些特殊情况)。

  • 使用mysql
    __init__.py

import pymysql

pymysql.install_as_MySQLdb()

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '192.168.108.1',
        # 'HOST': 'localhost',
        'USER': 'root',
        'PASSWORD': 'thinker',
        'NAME': 'messages',
        'PORT': '3306',
    }
}

登录操作

  • 登录注册
from django.contrib.auth import authenticate, login, logout
 
def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # 跳转到成功页面.
        else:
            # 返回一个无效帐户的错误
    else:
        # 返回登录失败页面。
        
def logout_view(request):
    logout(request)
    
  • 验证登录

def my_view(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/login/?next=%s' % request.path)
        
from django.contrib.auth.decorators import login_required
 
@login_required(login_url='/accounts/login/')
def my_view(request):

template

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',  # template 添加 MEDIA_URL 路径
            ],
        },
    },
]

view ListView, DetailView

csrf:

from django.views.decorators.csrf import csrf_exempt, csrf_protect

@csrf_exempt # 函数无需认证
def uers(request):
    xxx
    
from django.utils.decorators import method_decorator

@method_decorator(csrf_exempt, name='dispatch') # 只有应用到`dispath`才会生效
class StudentView(view):

CBV

from django.views import View

class StudentView(view):

form类

from django import forms

class RegisterForm(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(required=True, min_length=5)
    captcha = CaptchaField(error_messages={'invalid': "验证码错误"})
    
# view
from .forms import LoginForm, RegisterForm, UserImageForm

login_form = LoginForm(request.POST)
if not login_form.is_valid():
    return render(request, 'login.html', {'msg': '用户名或密码错误', 'login_form': login_form})

待續

相关文章

网友评论

      本文标题:django笔记

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