# 法律条文咨询APP - Python实现方案
我将设计一个基于Python的法律条文咨询应用,提供一个直观的界面让用户轻松查找和浏览法律条文。
## 设计思路
- 使用Flask作为后端框架,轻量且高效
- SQLite数据库存储法律条文数据
- 前端使用Bootstrap实现响应式设计
- 实现关键词搜索和分类浏览功能
- 提供条文详情展示和书签功能
## 完整实现代码
### 文件结构
```
legal_app/
├── app.py # Flask主程序
├── database.py # 数据库初始化脚本
├── requirements.txt # 依赖库列表
├── static/
│ ├── style.css # 自定义样式
│ └── script.js # 前端交互脚本
└── templates/
├── base.html # 基础模板
├── index.html # 主页面
├── search.html # 搜索结果页
└── detail.html # 条文详情页
```
### 代码实现
**app.py**
```python
from flask import Flask, render_template, request, redirect, url_for, jsonify
import sqlite3
import os
app = Flask(__name__)
DATABASE = 'laws.db'
def get_db():
conn = sqlite3.connect(DATABASE)
conn.row_factory = sqlite3.Row
return conn
@app.route('/')
def index():
return render_template('index.html')
@app.route('/search')
def search():
query = request.args.get('q', '')
category = request.args.get('category', '')
conn = get_db()
cur = conn.cursor()
if query:
cur.execute("""
SELECT * FROM laws
WHERE title LIKE ? OR content LIKE ?
ORDER BY category, title
""", ('%'+query+'%', '%'+query+'%'))
elif category:
cur.execute("""
SELECT * FROM laws
WHERE category = ?
ORDER BY title
""", (category,))
else:
cur.execute("SELECT * FROM laws ORDER BY category, title")
results = cur.fetchall()
conn.close()
return render_template('search.html', results=results, query=query, category=category)
@app.route('/law/
def law_detail(law_id):
conn = get_db()
cur = conn.cursor()
cur.execute("SELECT * FROM laws WHERE id = ?", (law_id,))
law = cur.fetchone()
# 获取相关条文(同类别)
cur.execute("SELECT id, title FROM laws WHERE category = ? AND id != ? LIMIT 5", (law['category'], law_id))
related = cur.fetchall()
conn.close()
return render_template('detail.html', law=law, related=related)
@app.route('/categories')
def get_categories():
conn = get_db()
cur = conn.cursor()
cur.execute("SELECT DISTINCT category FROM laws ORDER BY category")
categories = [row['category'] for row in cur.fetchall()]
conn.close()
return jsonify(categories)
@app.route('/bookmark', methods=['POST'])
def bookmark():
law_id = request.form.get('law_id')
# 实际应用中这里会实现用户登录和书签存储
# 现在仅模拟书签功能
return jsonify({'status': 'success', 'message': '已添加到书签'})
if __name__ == '__main__':
# 如果数据库不存在,则初始化
if not os.path.exists(DATABASE):
from database import init_db
init_db()
app.run(debug=True)
```
**database.py**
```python
import sqlite3
def init_db():
conn = sqlite3.connect('laws.db')
c = conn.cursor()
# 创建法律条文表
c.execute('''CREATE TABLE laws
(id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT NOT NULL,
category TEXT NOT NULL,
source TEXT,
effective_date TEXT)''')
# 插入示例数据
laws = [
('中华人民共和国宪法', '第一条 中华人民共和国是工人阶级领导的、以工农联盟为基础的人民民主专政的社会主义国家...', '宪法', '全国人民代表大会', '1982-12-04'),
('中华人民共和国民法典', '第一条 为了保护民事主体的合法权益,调整民事关系,维护社会和经济秩序...', '民法', '全国人民代表大会', '2021-01-01'),
('中华人民共和国刑法', '第一条 为了惩罚犯罪,保护人民,根据宪法,结合我国同犯罪作斗争的具体经验及实际情况,制定本法...', '刑法', '全国人民代表大会', '2020-12-26'),
('中华人民共和国劳动法', '第一条 为了保护劳动者的合法权益,调整劳动关系,建立和维护适应社会主义市场经济的劳动制度...', '劳动法', '全国人民代表大会常务委员会', '2018-12-29'),
('中华人民共和国合同法', '第一条 为了保护合同当事人的合法权益,维护社会经济秩序,促进社会主义现代化建设,制定本法...', '民法', '全国人民代表大会', '1999-03-15'),
('中华人民共和国公司法', '第一条 为了规范公司的组织和行为,保护公司、股东和债权人的合法权益,维护社会经济秩序...', '商法', '全国人民代表大会常务委员会', '2018-10-26'),
('中华人民共和国消费者权益保护法', '第一条 为保护消费者的合法权益,维护社会经济秩序,促进社会主义市场经济健康发展,制定本法...', '经济法', '全国人民代表大会常务委员会', '2013-10-25'),
]
c.executemany('INSERT INTO laws (title, content, category, source, effective_date) VALUES (?, ?, ?, ?, ?)', laws)
conn.commit()
conn.close()
print("数据库初始化完成!")
if __name__ == '__main__':
init_db()
```
**templates/base.html**
```html