Python 开发法律条文咨询APP

# 法律条文咨询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



   
   
    法律条文咨询系统
   
   
   


   

   


        {% block content %}{% endblock %}
   

   


       

            © 2023 法律条文咨询系统 | 数据仅供参考,请以官方发布为准
       

   

   
   

你可能感兴趣的:(python)