现操week6 :File Management & SQLite Database

本文档详细介绍了如何在UWP应用中集成SQLite数据库,包括实现待办事项的增删改查功能、图片存储与检索,以及使用第三方工具查看数据库内容等关键步骤。

需求

实现todo表项的增、删、改、查 70%
利用数据库保存及恢复应用状态 15%
学习使用第三方工具查看数据库内容 5%
拓展:10%
进行图片的存取,如每个表项的图片状态保存5%
在实验报告中描述LocalFolder RoamingFolder等存储位置的作用
在实验报告中描述StringBuilder 的作用5%

整理:
1. 页面右上角添加搜索框,实现(按Title)查找功能,以弹出消息框的形式返回查询的信息。查找可以模糊查找,即Title包含了搜索词即可。输入*则返回全部。
2. 增删改同步于数据库
3. 保存图片到数据库

基础知识

SQLite的使用

每一个database都是一个sqlite3对象;
每一个语句都是一个sqlite3_stmt对象;每个sqlite3_stmt对象有它的生命周期。

Database Connection Handle

typedef struct sqlite3 sqlite3;
Each open SQLite database is represented by a pointer to an instance of the opaque structure named “sqlite3”. It is useful to think of an sqlite3 pointer as an object.
Constructors: sqlite3_open(), sqlite3_open16(), sqlite3_open_v2()
Destructors: sqlite3_close(), sqlite3_close_v2()

Prepared Statement Object

typedef struct sqlite3_stmt sqlite3_stmt;
An instance of this object represents a single SQL statement that has been compiled into binary form and is ready to be evaluated.
Think of each SQL statement as a separate computer program. The original SQL text is source code. A prepared statement object is the compiled object code. All SQL must be converted into a prepared statement before it can be run.
The life-cycle of a prepared statement object usually goes like this:

Create the prepared statement object using sqlite3_prepare_v2().
Bind values to parameters using the sqlite3_bind_*() interfaces.
Run the SQL by calling sqlite3_step() one or more times.
Reset the prepared statement using sqlite3_reset() then go back to step 2. Do this zero or more times.
Destroy the object using sqlite3_finalize().

Constructors: sqlite3_prepare(), sqlite3_prepare16(), sqlite3_prepare16_v2(), sqlite3_prepare_v2()
Destructor: sqlite3_finalize()

使用UWP时SQLite保存在本地的位置

说了半天使用SQLite开发,那么我们创建出来的数据库究竟在存放在哪里呢?系统默认是放在这个路径的:C:\Users(username)\AppData\Local\Packages(packagename)\LocalState,其中username当然就不用小编解释了,当然就是您的用户名喽!packagename可以在工程目录里面的Package.appxmanifest文件里查看

常用uri前缀

这里写图片描述

实验过程

1.画图

由于对Layout不熟悉,画图都花了好久。。

2. 建立一个DbManager类

拿来主义地使用课件上的代码即可。
在编写返回多个结果的search函数时稍微遇到点小问题,查得

The result code SQLiteResult.DONE means sqlite3_step() has finished executing. **In your code snippet, if your data table still have rows need to read, statement.Step() will return SQLiteResult.ROW **result code, which means sqlite3_step() has another row ready to read, not finished.

此外再稍微修改TodoItem,增加一个可写入Id的构造器。

3. 为应用程序添加Dbmanager的服务

上周做图片绑定时为了方便给todoItem增加了一个StorageFile字段,但是StorageFile是没办法保存到DB中去的,因而又要修改TodoItem(增加字段filePath)了。
思路变成:
选择图片—保存到LocalFolder—将相应路径写入TodoItem。不完成这个就不能开始服务的添加。

修改TodoItem及株连(?)的代码

由于只要有StorageFile对象就可以写入本地,只修改ViewModel内部即可 。
这里的保存事实上是一种复制。弄清楚这个,使用:

uwp storagefile copy to localfolder

进行搜索,就找到了很多相关答案。

winrt-c-sharp-copy-image-from-asset-to-localstorage

StorageFile file =...;
await file.CopyAsync(ApplicationData.Current.LocalFolder, "image.png");

4. 用StringBuilder编写查询结果

sb.AppendFormat("Title: {0}  Description: {1}  Time: {2}", i.title, i.description, i.date.ToString());
                    sb.Append('\n');

5. 启动app时从数据库创建listview

实现图片从数据库读入的思路
使用filePath保存—-启动app时在viewmodel同步listview—使用一个异步函数封装同步操作,进行循环的大量的文件读取,加载bitmapimage
实现:
其实根本不用保存filePath,因为图片都唯一对应item,而且名字就是item.id。
会出现问题的是图片类型,此处有两个选择
1.加载时对多种类型进行测试
2.写入todoitem

虽然说写入todoitem好像也不是一个好选择,但是测试类型的话太耗时了。还是选择写入Todoitem。

Debug

首先遇到的问题是,添加项时,如果不选择图片,一添加就会出错。
即使在viewmodel的添加函数里默认设置它的bitmapimage居然也不行。
——通过Debug工具查看变量值,犯了低级错误:在应该使用类成员的地方用了局部变量
然后(StorageFileObject.fileType中是包含”.”的,不用自己添加。

之后开始测试数据库部分。
1.增加/删除
用可视化工具辅助。先寻找一下DB创建到哪儿去了。。
username/appdata/package/…
包名在manifest里可以找到。

BUG_02:增加虽然调用了dbManager的函数,但是并没有插入到数据库中,不知道什么原因。。明明跟样例是一模一样的。

—-原因也是很弱智,INSERT里面我忘记插入Id字段了……只要schema不同插入都会失败。。
2.查询
注意通配符的语法.

 WHERE Description LIKE '%'+@SearchTerm+'%'

而且通配时不用bind参数,要分情况处理。
3.更新
图片绑定的部分需要处理一下……

BUG_03:查询结果的dialog不知道为什么好像只能显示一行,经过调试stringbuilder的内容明明是正确的。

—-还是弱智错误:应该使用.Content属性,而不是.Title。

BUG_04:查询为空时没有提示信息。

—–查询按钮增加处理即可。

BUG_05:Create之后form不清空。

—–done

BUG_06: 写入数据库的图片格式和实际不匹配。

—–忘记修改DBmanager中的更新函数

BUG_07: 无法复制已存在的文件

—-复制前先检查是否存在,用探测的方法。

var flag = StorageFile.GetFileFromPathAsync(pathToCopy);
    if (flag == null)
     await f.CopyAsync(ApplicationData.Current.LocalFolder, nameOfImg);
BUG_08:删除后form不清空。

——done.

BUG_09: appbarbutton上的edit,点击后子页的图片不改变

—–在Menuflyoutitem_Edit_Clicked处添加

布局

太恶心了,布局真的太恶心了,各种巨难控制。如果没有出现想要的效果,一定要先删除掉所有的width,margin,height,alignment等等参数!
更好的设计方法是从一开始先确定好结构,而不要边测试边修改,实在是太耗时了。而且由于XAML语言,嵌套grid会变得非常难读且恶心。

感想

1.类比和推理的能力非常重要。
2.设计数据模型的时候要考虑清楚可扩展性,同时保存一些低级的原始数据,否则就会出现像这两次这样修改Todoitem的同时大面积修改应用的惨剧
3. 一定要弄清楚问题,才可能找到更好的结果;但有时候问题也是在不断的搜索中变清晰的,所以从搜索开始,再慢慢思考哪些结果是需要的
4. 不使用含有completed字段的表虽然能满足作业需求,但显然是不合理的。

实验结果

这里写图片描述

这里写图片描述

这里写图片描述

NoReverseMatch at / 'learning_logs' is not a registered namespace Request Method: GET Request URL: http://127.0.0.1:8000/ Django Version: 2.0.10 Exception Type: NoReverseMatch Exception Value: 'learning_logs' is not a registered namespace Exception Location: e:\learn\learning_log\ll_env\lib\site-packages\django\urls\base.py in reverse, line 86 Python Executable: e:\learn\learning_log\ll_env\Scripts\python.exe Python Version: 3.4.2 Python Path: ['e:\\learn\\learning_log', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'e:\\learn\\learning_log\\ll_env', 'e:\\learn\\learning_log\\ll_env\\lib\\site-packages'] Server time: Thu, 15 May 2025 01:52:30 +0000 Error during template rendering In template e:\learn\learning_log\learning_logs\templates\learning_logs\base.html, error at line 3 'learning_logs' is not a registered namespace 1 <p> 2 <a href="{% url 'learning_logs:index' % }"> Learning Log</a> - 3 <a href="{% url 'learning_logs:topics' %}">Topics</a> 4 </p> 5 6 {% block content %} {% endblock content %} 7 Traceback Switch to copy-and-paste view e:\learn\learning_log\ll_env\lib\site-packages\django\urls\base.py in reverse extra, resolver = resolver.namespace_dict[ns] ... ▶ Local vars During handling of the above exception ('learning_logs'), another exception occurred: e:\learn\learning_log\ll_env\lib\site-packages\django\core\handlers\exception.py in inner response = get_response(request) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\core\handlers\base.py in _get_response response = self.process_exception_by_middleware(e, request) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\core\handlers\base.py in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) ... ▶ Local vars e:\learn\learning_log\learning_logs\views.py in index return render(request,'learning_logs/index.html') ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\shortcuts.py in render content = loader.render_to_string(template_name, context, request, using=using) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\loader.py in render_to_string return template.render(context, request) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\backends\django.py in render return self.template.render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in render return self._render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in _render return self.nodelist.render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in render bit = node.render_annotated(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in render_annotated return self.render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\loader_tags.py in render return compiled_parent._render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in _render return self.nodelist.render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in render bit = node.render_annotated(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\base.py in render_annotated return self.render(context) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\template\defaulttags.py in render url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) ... ▶ Local vars e:\learn\learning_log\ll_env\lib\site-packages\django\urls\base.py in reverse raise NoReverseMatch("%s is not a registered namespace" % key) ... ▶ Local vars Request information USER AnonymousUser GET No GET data POST No POST data FILES No FILES data COOKIES No cookie data META Variable Value #ENVTSLOGRBCSHELLEXT2372 '2554864' ALLUSERSPROFILE 'C:\\ProgramData' APPDATA 'C:\\Users\\ABCDC\\AppData\\Roaming' COMMONPROGRAMFILES 'C:\\Program Files\\Common Files' COMMONPROGRAMFILES(X86) 'C:\\Program Files (x86)\\Common Files' COMMONPROGRAMW6432 'C:\\Program Files\\Common Files' COMPUTERNAME 'ABCDC-PC' COMSPEC 'C:\\Windows\\system32\\cmd.exe' CONTENT_LENGTH '' CONTENT_TYPE 'text/plain' DJANGO_SETTINGS_MODULE 'learning_log.settings' FP_NO_HOST_CHECK 'NO' GATEWAY_INTERFACE 'CGI/1.1' HOMEDRIVE 'C:' HOMEPATH '\\Users\\ABCDC' HTTP_ACCEPT 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' HTTP_ACCEPT_ENCODING 'gzip, deflate, br' HTTP_ACCEPT_LANGUAGE 'zh-CN,zh;q=0.9' HTTP_CACHE_CONTROL 'max-age=0' HTTP_CONNECTION 'keep-alive' HTTP_HOST '127.0.0.1:8000' HTTP_SEC_CH_UA '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' HTTP_SEC_CH_UA_MOBILE '?0' HTTP_SEC_CH_UA_PLATFORM '"Windows"' HTTP_SEC_FETCH_DEST 'document' HTTP_SEC_FETCH_MODE 'navigate' HTTP_SEC_FETCH_SITE 'none' HTTP_SEC_FETCH_USER '?1' HTTP_UPGRADE_INSECURE_REQUESTS '1' HTTP_USER_AGENT 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like ' 'Gecko) Chrome/109.0.0.0 Safari/537.36' LOCALAPPDATA 'C:\\Users\\ABCDC\\AppData\\Local' LOGONSERVER '\\\\ABCDC-PC' NUMBER_OF_PROCESSORS '4' OS 'Windows_NT' PATH 'e:\\learn\\learning_log\\ll_env\\Scripts;C:\\Python34\\;C:\\Python34\\Scripts;C:\\Program ' 'Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS ' 'Client\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program ' 'Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common ' 'Files\\Intel\\WirelessCommon\\;C:\\Program Files\\Intel\\Intel(R) Management ' 'Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine ' 'Components\\IPT;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine ' 'Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine ' 'Components\\IPT;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program ' 'Files\\Common Files\\Intel\\WirelessCommon\\;C:\\Wind\\WFC\\bin\\' PATHEXT '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY' PATH_INFO '/' PROCESSOR_ARCHITECTURE 'AMD64' PROCESSOR_IDENTIFIER 'Intel64 Family 6 Model 69 Stepping 1, GenuineIntel' PROCESSOR_LEVEL '6' PROCESSOR_REVISION '4501' PROGRAMDATA 'C:\\ProgramData' PROGRAMFILES 'C:\\Program Files' PROGRAMFILES(X86) 'C:\\Program Files (x86)' PROGRAMW6432 'C:\\Program Files' PROMPT '(ll_env) $P$G' PSMODULEPATH 'C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\' PUBLIC 'C:\\Users\\Public' QUERY_STRING '' REMOTE_ADDR '127.0.0.1' REMOTE_HOST '' REQUEST_METHOD 'GET' RUN_MAIN 'true' SCRIPT_NAME '' SERVER_NAME 'ABCDC-PC' SERVER_PORT '8000' SERVER_PROTOCOL 'HTTP/1.1' SERVER_SOFTWARE 'WSGIServer/0.2' SESSIONNAME 'Console' SHELLLAUNCH{A81BA54B-CCFE-4204-8E79-A68C0FDFA5CF} 'ShellExt' SYSTEMDRIVE 'C:' SYSTEMROOT 'C:\\Windows' TEMP 'C:\\Users\\ABCDC\\AppData\\Local\\Temp' TMP 'C:\\Users\\ABCDC\\AppData\\Local\\Temp' USERDOMAIN 'ABCDC-PC' USERNAME 'ABCDC' USERPROFILE 'C:\\Users\\ABCDC' VIRTUAL_ENV 'e:\\learn\\learning_log\\ll_env' WINDIR 'C:\\Windows' WINDOWS_TRACING_FLAGS '3' WINDOWS_TRACING_LOGFILE 'C:\\BVTBin\\Tests\\installpackage\\csilogfile.log' _OLD_VIRTUAL_PATH 'C:\\Python34\\;C:\\Python34\\Scripts;C:\\Program Files (x86)\\Intel\\iCLS ' 'Client\\;C:\\Program Files\\Intel\\iCLS ' 'Client\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program ' 'Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common ' 'Files\\Intel\\WirelessCommon\\;C:\\Program Files\\Intel\\Intel(R) Management ' 'Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine ' 'Components\\IPT;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine ' 'Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine ' 'Components\\IPT;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program ' 'Files\\Common Files\\Intel\\WirelessCommon\\;C:\\Wind\\WFC\\bin\\' _OLD_VIRTUAL_PROMPT '$P$G' wsgi.errors <_io.TextIOWrapper name='<stderr>' mode='w' encoding='cp936'> wsgi.file_wrapper '' wsgi.input <_io.BufferedReader name=884> wsgi.multiprocess False wsgi.multithread True wsgi.run_once False wsgi.url_scheme 'http' wsgi.version (1, 0) Settings Using settings module learning_log.settings Setting Value ABSOLUTE_URL_OVERRIDES {} ADMINS [] ALLOWED_HOSTS [] APPEND_SLASH True AUTHENTICATION_BACKENDS ['django.contrib.auth.backends.ModelBackend'] AUTH_PASSWORD_VALIDATORS '********************' AUTH_USER_MODEL 'auth.User' BASE_DIR 'e:\\learn\\learning_log' CACHES {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS 'default' CACHE_MIDDLEWARE_KEY_PREFIX '********************' CACHE_MIDDLEWARE_SECONDS 600 CSRF_COOKIE_AGE 31449600 CSRF_COOKIE_DOMAIN None CSRF_COOKIE_HTTPONLY False CSRF_COOKIE_NAME 'csrftoken' CSRF_COOKIE_PATH '/' CSRF_COOKIE_SECURE False CSRF_FAILURE_VIEW 'django.views.csrf.csrf_failure' CSRF_HEADER_NAME 'HTTP_X_CSRFTOKEN' CSRF_TRUSTED_ORIGINS [] CSRF_USE_SESSIONS False DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.sqlite3', 'HOST': '', 'NAME': 'e:\\learn\\learning_log\\db.sqlite3', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}} DATABASE_ROUTERS [] DATA_UPLOAD_MAX_MEMORY_SIZE 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS 1000 DATETIME_FORMAT 'N j, Y, P' DATETIME_INPUT_FORMATS ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT 'N j, Y' DATE_INPUT_FORMATS ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG True DEBUG_PROPAGATE_EXCEPTIONS False DECIMAL_SEPARATOR '.' DEFAULT_CHARSET 'utf-8' DEFAULT_CONTENT_TYPE 'text/html' DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FILE_STORAGE 'django.core.files.storage.FileSystemStorage' DEFAULT_FROM_EMAIL 'webmaster@localhost' DEFAULT_INDEX_TABLESPACE '' DEFAULT_TABLESPACE '' DISALLOWED_USER_AGENTS [] EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST 'localhost' EMAIL_HOST_PASSWORD '********************' EMAIL_HOST_USER '' EMAIL_PORT 25 EMAIL_SSL_CERTFILE None EMAIL_SSL_KEYFILE '********************' EMAIL_SUBJECT_PREFIX '[Django] ' EMAIL_TIMEOUT None EMAIL_USE_LOCALTIME False EMAIL_USE_SSL False EMAIL_USE_TLS False FILE_CHARSET 'utf-8' FILE_UPLOAD_DIRECTORY_PERMISSIONS None FILE_UPLOAD_HANDLERS ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] FILE_UPLOAD_MAX_MEMORY_SIZE 2621440 FILE_UPLOAD_PERMISSIONS None FILE_UPLOAD_TEMP_DIR None FIRST_DAY_OF_WEEK 0 FIXTURE_DIRS [] FORCE_SCRIPT_NAME None FORMAT_MODULE_PATH None FORM_RENDERER 'django.forms.renderers.DjangoTemplates' IGNORABLE_404_URLS [] INSTALLED_APPS ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'learning_logs'] INTERNAL_IPS [] LANGUAGES [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE 'en-us' LANGUAGE_COOKIE_AGE None LANGUAGE_COOKIE_DOMAIN None LANGUAGE_COOKIE_NAME 'django_language' LANGUAGE_COOKIE_PATH '/' LOCALE_PATHS [] LOGGING {} LOGGING_CONFIG 'logging.config.dictConfig' LOGIN_REDIRECT_URL '/accounts/profile/' LOGIN_URL '/accounts/login/' LOGOUT_REDIRECT_URL None MANAGERS [] MEDIA_ROOT '' MEDIA_URL '' MESSAGE_STORAGE 'django.contrib.messages.storage.fallback.FallbackStorage' MIDDLEWARE ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] MIGRATION_MODULES {} MONTH_DAY_FORMAT 'F j' NUMBER_GROUPING 0 PASSWORD_HASHERS '********************' PASSWORD_RESET_TIMEOUT_DAYS '********************' PREPEND_WWW False ROOT_URLCONF 'learning_log.urls' SECRET_KEY '********************' SECURE_BROWSER_XSS_FILTER False SECURE_CONTENT_TYPE_NOSNIFF False SECURE_HSTS_INCLUDE_SUBDOMAINS False SECURE_HSTS_PRELOAD False SECURE_HSTS_SECONDS 0 SECURE_PROXY_SSL_HEADER None SECURE_REDIRECT_EXEMPT [] SECURE_SSL_HOST None SECURE_SSL_REDIRECT False SERVER_EMAIL 'root@localhost' SESSION_CACHE_ALIAS 'default' SESSION_COOKIE_AGE 1209600 SESSION_COOKIE_DOMAIN None SESSION_COOKIE_HTTPONLY True SESSION_COOKIE_NAME 'sessionid' SESSION_COOKIE_PATH '/' SESSION_COOKIE_SECURE False SESSION_ENGINE 'django.contrib.sessions.backends.db' SESSION_EXPIRE_AT_BROWSER_CLOSE False SESSION_FILE_PATH None SESSION_SAVE_EVERY_REQUEST False SESSION_SERIALIZER 'django.contrib.sessions.serializers.JSONSerializer' SETTINGS_MODULE 'learning_log.settings' SHORT_DATETIME_FORMAT 'm/d/Y P' SHORT_DATE_FORMAT 'm/d/Y' SIGNING_BACKEND 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS [] STATICFILES_DIRS [] STATICFILES_FINDERS ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATICFILES_STORAGE 'django.contrib.staticfiles.storage.StaticFilesStorage' STATIC_ROOT None STATIC_URL '/static/' TEMPLATES [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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']}}] TEST_NON_SERIALIZED_APPS [] TEST_RUNNER 'django.test.runner.DiscoverRunner' THOUSAND_SEPARATOR ',' TIME_FORMAT 'P' TIME_INPUT_FORMATS ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE 'UTC' USE_ETAGS False USE_I18N True USE_L10N True USE_THOUSAND_SEPARATOR False USE_TZ True USE_X_FORWARDED_HOST False USE_X_FORWARDED_PORT False WSGI_APPLICATION 'learning_log.wsgi.application' X_FRAME_OPTIONS 'SAMEORIGIN' YEAR_MONTH_FORMAT 'F Y' You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.
最新发布
05-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值